首页 > 解决方案 > 如何与两个数组数据进行比较和更改?

问题描述

我有一个数字数组 A 和一个数据数组 B

他们只是喜欢:

A:

[11, 14]

乙:

[
  { title: 'title 1', data: [ { node_id: 11, selected: false }, { node_id: 14, selected: false } ]},
  { title: 'title 2', data: [ { node_id: 70, selected: false } ]}
]

我的代码是这样的:

B.map((value) => {
  A.map((selectedDeviceId) => {
    value.data.map((valueData) => {
      selectedDeviceId === valueData.node_id
        ? (valueData.selected = true)
        : (valueData.selected = false);
    });
  });
});

但是当我打印 B 数组时,结果是:

[
  { title: 'title 1', data: [ { node_id: 11, selected: false }, { node_id: 14, selected: true } ]},
  { title: 'title 2', data: [ { node_id: 70, selected: false } ]}
]

我希望他们应该是:

[ { node_id: 11, selected: true }, { node_id: 14, selected: true } ]

我的代码有什么问题?

标签: javascriptarrays

解决方案


您可以使用Array.prototype.flatMap()带有Array.prototype.filter()方法的数组来获取结果。使用 flatMap 遍历数组,然后使用 filter 方法Array.prototype.some()过滤 node_ids。

const number = [11, 14];
const data = [
  {
    title: 'title 1',
    data: [
      { node_id: 11, selected: false },
      { node_id: 14, selected: false },
    ],
  },
  { title: 'title 2', data: [{ node_id: 70, selected: false }] },
];

const ret = data.flatMap((x) =>
  x.data.filter((y) => number.some((z) => z === y.node_id))
);
console.log(ret);


推荐阅读