如何根据 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 中的输出应该是:

所以,我想要的 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);