javascript - 如何从javascript比较两个内部对象数组
问题描述
我有一个对象 X 和 y 的两个数组,形成x
value
数组["N","Y"]
,我需要过滤y
数组选项值,基于我需要返回y
数组,我试过这样:
const x = [{"application":"Collect","attr":[{"name":"document","value":["N","Y"],"disabled":true}, {"name":"video","value":["Y"],"disabled":false}]}]
const y = [{"name":"document","options":[{"name":"Yes","value":"Y"},{"name":"No","value":"N"},{"name":"view", value:"view"}]}]
const iArr = x[0].attr.map(m => {
m.value.map(o => {
y.map(yl => {
yl.options.filter(s => {
if (o === s.value) {
console.log(s)
}
})
})
})
})
console.log(iArr)
我的输出应该是
const result = [{"name":"document","options":[{"name":"Yes","value":"Y"},{"name":"No","value":"N"}]}]
解决方案
我们可以在这里使用Array.map来根据 x 中的 attr 详细信息更改 y 中每个元素的值。
我们通过 x 中相应的 attr 值过滤y 中的每个 element.options。
在此示例中,我假设适用于 y 中每个元素的规则位于相同的属性 index 中,例如 x[0].attr[index]。
const x = [{"application":"Collect","attr":[{"name":"document","value":["N","Y"],"disabled":true}, {"name":"video","value":["Y"],"disabled":false}]}]
const y = [{"name":"document 1","options":[{"name":"Yes","value":"Y"},{"name":"No","value":"N"},{"name":"view", value:"view"}]},
{"name":"document 2","options":[{"name":"Yes","value":"Y"},{"name":"No","value":"N"},{"name":"view", value:"view"}]}]
const result = y.map((element, index) => {
let res = { ... element };
res.options = element.options.filter(option => x[0].attr[index].value.includes(option.value));
return res;
});
console.log("Result:",result);
推荐阅读
- c# - DropDownList 无法更改 gridview 中的页面
- python - 使用数据框(python)删除标记化 nltk 中的标点符号
- azure - 如何将大文件上传到 Azure Blob 存储 (.NET Core)
- reactjs - 如何使用 numberWithCommas Regex 在 React 中正确格式化货币
- excel - 从选定单元格的行中获取值
- .net - Blazor Web Assembly 构建失败.Net 6 RC1 MONO_PATH 不存在或权限错误
- reactjs - React useEffect 依赖或 useCallback 似乎会导致重新渲染
- schedule - 将两个行程与它们之间的拉入/拉出事件联系起来
- java - 如何在 netbeans 应用程序/项目中永久插入视频
- android - 使用 TextInputEditText 时,错误图标会覆盖结束图标