如何合并对象数组 A 和 B 并形成对象数组 C 包含新的键值对?
How to merge array of objects A and B and form array of object C contains new key value pair?
我正在使用 Node.js 进行编程,
在下面的对象数组中 A 和 B 的数组也有一些重复值,但我们必须跳过重复的 for only based on func_id 个数组。在数组 C 中,我们同时推送了 A 和 B func_score 值基于 func_id 和 func_score_A 来自 A(func_score) 数组和 func_score_B 来自 B(func_score) 数组。
示例代码:
var A = [{
"func_id": 1,
"func_score": 0.4
}, {
"func_id": 2,
"func_score": 0.5
}, {
"func_id": 3,
"func_score": 0.7
}];
var B = [{
"func_id": 3,
"func_score": 0.9
}, {
"func_id": 4,
"func_score": 0.7
}, {
"func_id": 5,
"func_score": 0.8
}];
var C = [];
var tmpArray = [];
A.forEach(function(element) {
B.forEach(function(loop) {
if (element.func_id === loop.func_id) {
var tmpObje = {
func_id: element.func_id,
func_sore_A: element.func_score,
func_sore_B: loop.func_score
}
tmpArray.push(tmpObje);
C.push(tmpObje);
return;
}
});
});
A.forEach(function(element) {
tmpArray.forEach(function(loop) {
if (element.func_id !== loop.func_id) {
var smsObj = {
func_id: element.func_id,
func_sore_A: element.func_score,
func_sore_B: 0
}
C.push(smsObj);
return;
}
});
});
B.forEach(function(element) {
tmpArray.forEach(function(loop) {
if (element.func_id !== loop.func_id) {
var domineObj = {
func_id: element.func_id,
func_sore_A: 0,
func_sore_B: loop.func_score
}
C.push(domineObj);
return;
}
});
});
console.log(C);
预期输出
[
{"func_id": 1,
"func_score_A": 0.4,
"func_score_B":0
},
{"func_id": 2,
"func_score_A": 0.5,
"func_score_B":0
},
{"func_id": 3,
"func_score_A": 0.7,
"func_score_B":0.9
},
{"func_id": 4,
"func_score_A": 0,
"func_score_B":0.7
},
{"func_id": 5,
"func_score_A": 0,
"func_score_B":0.8
}
]
注:
您可以在没有下面所有代码的情况下执行此操作 var C = A.concat(B)
var A = [{
"func_id": 1,
"func_score": 0.4
}, {
"func_id": 2,
"func_score": 0.5
}, {
"func_id": 3,
"func_score": 0.7
}];
var B = [{
"func_id": 3,
"func_score": 0.9
}, {
"func_id": 4,
"func_score": 0.7
}, {
"func_id": 5,
"func_score": 0.8
}];
//check the console for output
console.log(A.concat(B));
这是一种可能更简单的方法。
var A = [{
"func_id": 1,
"func_score": 0.4
}, {
"func_id": 2,
"func_score": 0.5
}, {
"func_id": 3,
"func_score": 0.7
}];
var B = [{
"func_id": 3,
"func_score": 0.9
}, {
"func_id": 4,
"func_score": 0.7
}, {
"func_id": 5,
"func_score": 0.8
}];
let C = A.map(e => {
return {
func_id: e.func_id,
func_score_A: e.func_score,
func_score_B: 0
};
});
B.forEach(e => {
let i = C.findIndex(x => x.func_id == e.func_id);
if (i >= 0) {
C[i].func_score_B = e.func_score;
} else {
C.push({
func_id: e.func_id,
func_score_A: 0,
func_score_B: e.func_score
})
}
});
console.log(C);
你的bug很简单,先把所有sore
换成score
。然后在你的 B.forEach()
循环中,你可能犯了错误 loop.func_score
而不是 element.func_score
.
B.forEach(function(element) {
tmpArray.forEach(function(loop) {
if (element.func_id !== loop.func_id) {
var domineObj = {
func_id: element.func_id,
func_sore_A: 0,
// loop should be element
// func_sore_B: loop.func_score
func_sore_B: element.func_score
}
C.push(domineObj);
return;
}
});
});
我正在使用 Node.js 进行编程, 在下面的对象数组中 A 和 B 的数组也有一些重复值,但我们必须跳过重复的 for only based on func_id 个数组。在数组 C 中,我们同时推送了 A 和 B func_score 值基于 func_id 和 func_score_A 来自 A(func_score) 数组和 func_score_B 来自 B(func_score) 数组。
示例代码:
var A = [{
"func_id": 1,
"func_score": 0.4
}, {
"func_id": 2,
"func_score": 0.5
}, {
"func_id": 3,
"func_score": 0.7
}];
var B = [{
"func_id": 3,
"func_score": 0.9
}, {
"func_id": 4,
"func_score": 0.7
}, {
"func_id": 5,
"func_score": 0.8
}];
var C = [];
var tmpArray = [];
A.forEach(function(element) {
B.forEach(function(loop) {
if (element.func_id === loop.func_id) {
var tmpObje = {
func_id: element.func_id,
func_sore_A: element.func_score,
func_sore_B: loop.func_score
}
tmpArray.push(tmpObje);
C.push(tmpObje);
return;
}
});
});
A.forEach(function(element) {
tmpArray.forEach(function(loop) {
if (element.func_id !== loop.func_id) {
var smsObj = {
func_id: element.func_id,
func_sore_A: element.func_score,
func_sore_B: 0
}
C.push(smsObj);
return;
}
});
});
B.forEach(function(element) {
tmpArray.forEach(function(loop) {
if (element.func_id !== loop.func_id) {
var domineObj = {
func_id: element.func_id,
func_sore_A: 0,
func_sore_B: loop.func_score
}
C.push(domineObj);
return;
}
});
});
console.log(C);
预期输出
[
{"func_id": 1,
"func_score_A": 0.4,
"func_score_B":0
},
{"func_id": 2,
"func_score_A": 0.5,
"func_score_B":0
},
{"func_id": 3,
"func_score_A": 0.7,
"func_score_B":0.9
},
{"func_id": 4,
"func_score_A": 0,
"func_score_B":0.7
},
{"func_id": 5,
"func_score_A": 0,
"func_score_B":0.8
}
]
注:
您可以在没有下面所有代码的情况下执行此操作 var C = A.concat(B)
var A = [{
"func_id": 1,
"func_score": 0.4
}, {
"func_id": 2,
"func_score": 0.5
}, {
"func_id": 3,
"func_score": 0.7
}];
var B = [{
"func_id": 3,
"func_score": 0.9
}, {
"func_id": 4,
"func_score": 0.7
}, {
"func_id": 5,
"func_score": 0.8
}];
//check the console for output
console.log(A.concat(B));
这是一种可能更简单的方法。
var A = [{
"func_id": 1,
"func_score": 0.4
}, {
"func_id": 2,
"func_score": 0.5
}, {
"func_id": 3,
"func_score": 0.7
}];
var B = [{
"func_id": 3,
"func_score": 0.9
}, {
"func_id": 4,
"func_score": 0.7
}, {
"func_id": 5,
"func_score": 0.8
}];
let C = A.map(e => {
return {
func_id: e.func_id,
func_score_A: e.func_score,
func_score_B: 0
};
});
B.forEach(e => {
let i = C.findIndex(x => x.func_id == e.func_id);
if (i >= 0) {
C[i].func_score_B = e.func_score;
} else {
C.push({
func_id: e.func_id,
func_score_A: 0,
func_score_B: e.func_score
})
}
});
console.log(C);
你的bug很简单,先把所有sore
换成score
。然后在你的 B.forEach()
循环中,你可能犯了错误 loop.func_score
而不是 element.func_score
.
B.forEach(function(element) {
tmpArray.forEach(function(loop) {
if (element.func_id !== loop.func_id) {
var domineObj = {
func_id: element.func_id,
func_sore_A: 0,
// loop should be element
// func_sore_B: loop.func_score
func_sore_B: element.func_score
}
C.push(domineObj);
return;
}
});
});