underscore/lodash 合并数组
underscore/lodash merge arrays
您好,有人可以帮忙吗?
有一些具有 类 属性的成绩数组,例如下面这两个:
var arr1 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}]
}, {
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
和
var arr2 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
}];
我想要的只是将它们合并为单个成绩数组,每个 grade.id 具有唯一的 类,如下所示:
var merge = [
{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}, {
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
},
{
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
使用 _.merge
回调,就像这样
var arr1 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}]
}, {
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
var arr2 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
}];
var res = _.merge(arr1, arr2, function (a, b) {
if (_.isArray(a)) {
return a.concat(b);
}
});
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.js"></script>
您可以使用 _.findIndex()
:
var merge = [];
arr1.forEach(function(object){
var i = _.findIndex(merge, { id: object.id });
if(i){
merge[i].classes = merge[i].classes.concat(object.classes)
}else{
merge.push(object);
}
});
arr2.forEach(function(object){
var i = _.findIndex(merge, { id: object.id });
if(i){
merge[i].classes = merge[i].classes.concat(object.classes)
}else{
merge.push(object);
}
});
在 JS 中
var arr1 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}]
}, {
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
var arr2 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
}];
var arr3 = [];
for (var i in arr1) {
arr3.push(arr1[i]);
for (var j in arr2) {
if (arr2[j].id == arr1[i].id) {
for (var k in arr2[j].classes) {
arr3[i].classes.push(arr2[j].classes[k]);
}
}
}
}
console.log(arr3);
您好,有人可以帮忙吗?
有一些具有 类 属性的成绩数组,例如下面这两个:
var arr1 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}]
}, {
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
和
var arr2 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
}];
我想要的只是将它们合并为单个成绩数组,每个 grade.id 具有唯一的 类,如下所示:
var merge = [
{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}, {
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
},
{
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
使用 _.merge
回调,就像这样
var arr1 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}]
}, {
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
var arr2 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
}];
var res = _.merge(arr1, arr2, function (a, b) {
if (_.isArray(a)) {
return a.concat(b);
}
});
console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.js"></script>
您可以使用 _.findIndex()
:
var merge = [];
arr1.forEach(function(object){
var i = _.findIndex(merge, { id: object.id });
if(i){
merge[i].classes = merge[i].classes.concat(object.classes)
}else{
merge.push(object);
}
});
arr2.forEach(function(object){
var i = _.findIndex(merge, { id: object.id });
if(i){
merge[i].classes = merge[i].classes.concat(object.classes)
}else{
merge.push(object);
}
});
在 JS 中
var arr1 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 54,
"name": "Class 1A AppMonkeyzTest"
}, {
"id": 55,
"name": "Class 1B AppMonkeyzTest"
}, {
"id": 59,
"name": "Class BG1 AppMonkeyzTest"
}]
}, {
"id": 54,
"name": "Grade 2 AppMonkeyzTest",
"classes": [{
"id": 56,
"name": "Class AA1 ppMonkeyzTest"
}, {
"id": 57,
"name": "Class BA1 AppMonkeyzTest"
}]
}];
var arr2 = [{
"id": 53,
"name": "Grade 1 AppMonkeyzTest",
"classes": [{
"id": 58,
"name": "Class BB1 AppMonkeyzTest"
}]
}];
var arr3 = [];
for (var i in arr1) {
arr3.push(arr1[i]);
for (var j in arr2) {
if (arr2[j].id == arr1[i].id) {
for (var k in arr2[j].classes) {
arr3[i].classes.push(arr2[j].classes[k]);
}
}
}
}
console.log(arr3);