如何基于jQuery中对象数组的比较来更改键值?

问题描述 投票:2回答:3

我在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”键应为“ [是”在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之间中断,以便不再重复。

我也尝试过检查下面的链接,但没有太多帮助。

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

compare array of objects

提前感谢。

jquery arrays compare key key-value
3个回答
1
投票
您可以使用A创建arr1Array.reduce()值的数组,然后使用Array.reduce()检查该数组中是否存在Array.includes中的每个Array.includes值,使用该值决定将A设置为arr2还是B

Yes

0
投票
使用地图并查看数组是否不大。

节省缩减并推动

No

0
投票
您还可以使用一个标志,如下所示

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);

希望这会有所帮助。
© www.soinside.com 2019 - 2024. All rights reserved.