【问题标题】:How to get some props of list array object by using reduce如何使用reduce获取列表数组对象的一些道具
【发布时间】:2019-11-09 00:32:54
【问题描述】:

我有像这样的列表数组对象:

let arr = [
    { a: 1, b: 2, c: 3, d: 4 },
    { a: 2, b: 3, c: 4, d: 5 },
    { a: 5, b: 6, c: 7, d: 8 }
]

在使用reduce()之后

// get props **b, c**
let arr_result = arr.reduce( ... )

// arr_result = [
//    { b: 2, c: 3 },
//    { b: 3, c: 4 },
//    { b: 6, c: 7 }
// ]

【问题讨论】:

  • map() 更适合这份工作时,为什么还要使用reduce()

标签: javascript arrays object ecmascript-6 reduce


【解决方案1】:

使用map

let arr = [{
    a: 1,
    b: 2,
    c: 3,
    d: 4
  },
  {
    a: 2,
    b: 3,
    c: 4,
    d: 5
  },
  {
    a: 5,
    b: 6,
    c: 7,
    d: 8
  }
]

const output = arr.map(({b, c}) =>  ({b, c}));

console.log(output);

【讨论】:

    【解决方案2】:

    您可以使用 ES6(及更高版本)的 object destructuring

    const arr = [
        { a: 1, b: 2, c: 3, d: 4 },
        { a: 2, b: 3, c: 4, d: 5 },
        { a: 5, b: 6, c: 7, d: 8 }
    ]
    
    const res = arr.map(obj => {
      const { b, c } = obj;
      return { b, c };
    });
    
    console.log(res);

    【讨论】:

      【解决方案3】:

      既然您要求使用 reduce 来实现这一点,那么这里就是方法。传递一个空数组作为thisArg & 在reduce回调函数中创建一个具有所需键的对象并将其推送到累加器

      let arr = [{
          a: 1,
          b: 2,
          c: 3,
          d: 4
        },
        {
          a: 2,
          b: 3,
          c: 4,
          d: 5
        },
        {
          a: 5,
          b: 6,
          c: 7,
          d: 8
        }
      ];
      
      
      let newArr = arr.reduce(function(acc, curr) {
      
        acc.push({
          b: curr.b,
          c: curr.c
        })
      
        return acc;
      }, [])
      
      console.log(newArr)

      【讨论】:

        【解决方案4】:

        如果你想使用reduce:

        const arr = [{a:1,b:2,c:3,d:4},{a:2,b:3,c:4,d:5},{a:5,b:6,c:7,d:8}];
        
        const res = arr.reduce((a, { b, c }) => (a.push({ b, c }), a), []);
        
        console.log(res);
        .as-console-wrapper { max-height: 100% !important; top: auto; }

        map 确实容易多了:

        const arr = [{a:1,b:2,c:3,d:4},{a:2,b:3,c:4,d:5},{a:5,b:6,c:7,d:8}];
        
        const res = arr.map(({ b, c }) => ({ b, c }));
        
        console.log(res);
        .as-console-wrapper { max-height: 100% !important; top: auto; }

        【讨论】:

        • const res = arr.reduce((acc, { b, c }) => (acc.push({ b, c }), acc), []);你能给我解释一下吗?谢了!
        • 我们将每个对象的bc 推送到结果数组acc,然后将其返回以供下一次迭代使用。
        猜你喜欢
        • 2018-12-07
        • 2021-03-27
        • 2021-10-30
        • 1970-01-01
        • 2017-02-17
        • 2018-08-26
        • 2020-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多