我在jQuery中有两个数组,如下所示。
var arr1 = [{A: "t1"},{A: "t3"}];
var arr2 = [{A: "t1",B:""},{A: "t2",B:""},{A: "t3",B:""},{A: "t4",B:""},{A: "t5",B:""},{A: "t6",B:""}];
var arr3 = []; //Only for output
现在,arr3中的输出应为:
arr3 = [{A: "t1",B:"Yes"},{A: "t2",B:"No"},{A: "t3",B:"Yes"},{A: "t4",B:"No"},{A: "t5",B:"No"},{A: "t6",B:"No"}];
这是我到目前为止尝试过的var arr1 = [{A: "t1"},{A: "t3"}]; var arr2 = [{A: "t1",B:""},{A: "t2",B:""},{A: "t3",B:""},{A: "t4",B:""},{A: "t5",B:""},{A: "t6",B:""}]; var arr3 = []; //Only for output arr1.forEach(function(x) { arr2.forEach(function(y) { if (x.A == y.A) { arr3.push({ A: x.A, B: "Yes" }); } else { arr3.push({ A: x.A, B: "No" }); } }); }); console.log(arr3);
//Output 0: {A: "t1", B: "Yes"} 1: {A: "t1", B: "No"} 2: {A: "t1", B: "No"} 3: {A: "t1", B: "No"} 4: {A: "t1", B: "No"} 5: {A: "t1", B: "No"} 6: {A: "t3", B: "No"} 7: {A: "t3", B: "No"} 8: {A: "t3", B: "Yes"} 9: {A: "t3", B: "No"} 10: {A: "t3", B: "No"} 11: {A: "t3", B: "No"}
这里的问题是,它对arr1中的每个项目重复,并且计数加倍。我知道它应该在if和else之间中断,以便不再重复。我也尝试过检查下面的链接,但没有太多帮助。
filter array of objects based on separate object keys, values
js - How to change one key's value based on another key's value in array of objects
Object comparison based on keys
提前感谢。
A
创建arr1
中Array.reduce()
值的数组,然后使用Array.reduce()
检查该数组中是否存在Array.includes
中的每个Array.includes
值,使用该值决定将A
设置为arr2
还是B
: Yes
节省缩减并推动
No
var arr1 = [{ A: "t1" }, { A: "t3" }];
var arr2 = [{ A: "t1", B: ""}, { A: "t2", B: "" }, { A: "t3", B: "" }, { A: "t4", B: "" }, { A: "t5", B: "" }, { A: "t6", B: "" }];
var arr3 = []; //Only for output
var arr1values = arr1.reduce((c, v) => c.concat([v.A]), []);
arr2.forEach(function(y) {
arr3.push({
A: y.A,
B: arr1values.includes(y.A) ? 'Yes' : 'No'
});
});
console.log(arr3);
希望这会有所帮助。