javascript - 如何与两个数组数据进行比较和更改?
问题描述
我有一个数字数组 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 } ]
我的代码有什么问题?
解决方案
您可以使用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);
推荐阅读
- multithreading - POSIX 条件变量 VS Win32 Event Objects(关于虚假唤醒问题)
- postgresql - PostgreSQL:row_to_json() 内连接问题
- r - fill_gaps 不添加新值
- vb.net - rdlc过滤中的特殊字符
- javascript - 使用 suitescript 从 API 创建自定义记录
- android - 如何在 Instagram 等活动之间滑动
- android - 如何调试admob插页式广告不可点击的问题?
- ruby-on-rails - 我想在 ruby 中获取数组的键值
- vue.js - Vue JS:单击时传递循环的当前对象
- c++ - 虽然 C++ 给出的结果与我预期的不同