Javascript 映射嵌套元素

标签 javascript

是否有一种 ES6 方法可以轻松过滤掉不需要的列?假设我们有以下数据:

const foo = [
  { 
    a:'blah', 
    b:'blah', 
    c:'blah', 
    d:[
      { a:'blah', b:'blah', c:'blah', e:'blah', f:'blah'},
      { a:'blah', b:'blah', c:'blah', e:'blah', f:'blah'},
      { a:'blah', b:'blah', c:'blah', e:'blah', f:'blah'},
      //... N number of objects     
    ],
  },
  { 
    a:'blah', 
    b:'blah', 
    c:'blah', 
    d:[
      { a:'blah', b:'blah', c:'blah', e:'blah', f:'blah'},
      { a:'blah', b:'blah', c:'blah', e:'blah', f:'blah'},
      { a:'blah', b:'blah', c:'blah', e:'blah', f:'blah'},
      //... N number of objects     
    ],
  },
  //... N number of objects     
];

我想过滤掉 e 和 f 值,所以我只有以下内容:

[
  { 
    a:'blah', 
    b:'blah', 
    c:'blah', 
    d:[
      { a:'blah', b:'blah', c:'blah' },
      { a:'blah', b:'blah', c:'blah' },
      { a:'blah', b:'blah', c:'blah' },
      //... N number of objects     
    ],
  },
  { 
    a:'blah', 
    b:'blah', 
    c:'blah', 
    d:[
      { a:'blah', b:'blah', c:'blah' },
      { a:'blah', b:'blah', c:'blah' },
      { a:'blah', b:'blah', c:'blah' },
      //... N number of objects     
    ],
  },
  //... N number of objects     
]

我认为它可能与此类似,但我不确定如何处理 d 值:

.map(x=>{ return {a: x.a, b: x.b, c: x.c, d:x.d}})

编辑:有没有办法在不引用不需要的值(e 或 f)的情况下做到这一点?换句话说,仅通过引用您要保留的值 (a,b,c,d)

最佳答案

使用Array#map , spread syntaxdestructuring

const foo=[{a:'blah',b:'blah',c:'blah',d:[{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},],},{a:'blah',b:'blah',c:'blah',d:[{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},],},]

const res = foo.map(({d, ...rest})=>{
  return {...rest, d: d.map(({e,f,...rest})=>({...rest}))}
});

console.log(res);

通过仅引用所需变量的解决方案:

const foo=[{a:'blah',b:'blah',c:'blah',d:[{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},],},{a:'blah',b:'blah',c:'blah',d:[{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},{a:'blah',b:'blah',c:'blah',e:'blah',f:'blah'},],},]

const res = foo.map(({d, ...rest})=>{
  return {...rest, d: d.map(({a,b,c})=>({a,b,c}))}
});

console.log(res);

关于Javascript 映射嵌套元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54329503/

相关文章:

javascript - 将 svg 字符串元素插入现有 svg 标签

javascript - 在未定义 JavaScript 对象中导入类时出错

javascript - 如何(某种程度上)向 fullcalendar 的 renderEvents 处理程序添加代码?

javascript - 在迭代中解决 promise

Javascript 函数返回值未定义

javascript - Plupload 弄乱了 jquery

javascript - 如何将 AEM 多字段组件结果从字符串拆分为数组

javascript - django-ckeditor:在哪里存储 config.js?

javascript - babelrc 中指定的未知插件 "transform-object-assign"

javascript - react native 电话号码输入