如何根据 jQuery 中对象数组的比较更改键值?
How to change key value based on comparison of array of objects in jQuery?
我在 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 中的输出应该是:
- arr2 中的所有值
- 如果 'A' 键存在,'B' 键应该是 Yes
在 arr1
- 如果 'A' 键不存在,'B' 键应该是 No
在 arr1
所以,我想要的 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 之间的某个地方中断,这样它就不会重复。
我也试过检查下面的链接,但没有得到太多帮助。
js - How to change one key's value based on another key's value in array of objects
Object comparison based on keys
compare array of objects
提前致谢。
您可以使用 Array.reduce()
, then use Array.includes
创建 arr1
中的 A
值的数组,以检查 arr2
中的每个 A
值是否存在在该数组中,使用它来决定是将 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);
使用 map 并查找数组是否很大。
保存一个reduce和push
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 = arr2.map(
item2 => ({
A: item2.A,
B: arr1.find(item1 => item1.A === item2.A) ? 'Yes' : 'No'
}));
console.log(arr3);
我在 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 中的输出应该是:
- arr2 中的所有值
- 如果 'A' 键存在,'B' 键应该是 Yes 在 arr1
- 如果 'A' 键不存在,'B' 键应该是 No 在 arr1
所以,我想要的 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 之间的某个地方中断,这样它就不会重复。
我也试过检查下面的链接,但没有得到太多帮助。
js - How to change one key's value based on another key's value in array of objects
Object comparison based on keys
compare array of objects
提前致谢。
您可以使用 Array.reduce()
, then use Array.includes
创建 arr1
中的 A
值的数组,以检查 arr2
中的每个 A
值是否存在在该数组中,使用它来决定是将 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);
使用 map 并查找数组是否很大。
保存一个reduce和push
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 = arr2.map(
item2 => ({
A: item2.A,
B: arr1.find(item1 => item1.A === item2.A) ? 'Yes' : 'No'
}));
console.log(arr3);