代码之家  ›  专栏  ›  技术社区  ›  ekjcfn3902039

销毁对象数组

  •  0
  • ekjcfn3902039  · 技术社区  · 5 年前

    我想基于某些键/值对筛选现有的对象数组。在下面的示例中,我希望结果是一个只有id和def字段的新对象数组(假设一个对象中可以有n个字段,所以我不想显式地删除abc)。但是,如果我像下面那样编写代码,那么看起来我必须一行一行地手工构建新的数组。有简单一点的班轮吗?

      const someArray = [
       {id: 1, abc: 2, def: 3},
       {id:4, abc: 6, def: 8},
       {id: 5, abc: 7, def: 9},
      ];
      const [array0, array1, array2] = someArray;
      const onlyOneRow = (({ id, def }) => ({ id, def }))(array0);
    
    2 回复  |  直到 5 年前
        1
  •  1
  •   Shidersz    5 年前

    这可以很容易地用 map() 方法:

    const someArray = [
        {id: 1, abc: 2, def: 3},
        {id:4, abc: 6, def: 8},
        {id: 5, abc: 7, def: 9},
    ];
    
    let res = someArray.map(x => {return {id: x.id, def: x.def}});
    
    console.log(res);
        2
  •  -1
  •   Sebastian Weiß    5 年前

    你可以使用 filter 创建一个符合您需要的新阵列。考虑这个例子:

    var array1 = [
      {id: 1, abc: 2, def: 3},
      {id:4, abc: 6, def: 8},
      {id: 5, abc: 7, def: 9},
    ];
    
    // pass a function to filter
    const filteredArray = array1.filter(({id,def}) => x.id == 4);
    
    console.log(filteredArray);
    // expected output: Array [{id:4, abc: 6, def: 8}]
    

    如果需要更改此筛选数组中的值,可以使用map:

    const mappedArray = output.map(x => {id: x.id, def: x.def});
    
    console.log(mappedArray);
    // expected output: Array [{id:4, def: 8}]