首页 > 解决方案 > 如何从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"}]}]

标签: javascriptecmascript-6

解决方案


我们可以在这里使用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);


推荐阅读