Array.reduce() 有问题。我有一些正确的输出。但我想不出剩下的

问题描述 投票:0回答:1

这里是说明:

  • 假装没有 Array.filter() 方法。使用 Array.reduce() 仅从提供的数组中过滤掉 price 属性为 10 或以上的对象。

  • 假设没有 Array.filter() 方法,只有 Array.reduce()。 您将如何使用 Array.reduce() 来模仿 filter 方法,从而 从下面的数组中,您可以创建一个仅由对象组成的新数组 来自包含 10 及以上价格属性的原始数组? 部分代码已经为您完成。 通过取消注释第 36 行的 return 语句来完成其余部分 并编写当 cur.price >= 10 时返回什么的代码。

这就是预期的输出:

https://i.stack.imgur.com/kLVJP.png

这是我目前所拥有的:

const gems = [
    { type: 'amethyst', price: 8 },
    { type: 'turquoise', price: 50 },
    { type: 'selenite', price: 2 },
    { type: 'topaz', price: 10 },
    { type: 'emerald', price: 500 }
]

const gemsOverTen = gems.reduce((acc, cur) => {
   if (cur.price < 10) return acc;
   if (cur.price >= 10) {
   return {
       ...acc,
        "type": cur.type, "price": cur.price
       }};
}, []);

console.log(gemsOverTen);



这也是我的codepen:

https://codepen.io/alexiscodes21/pen/wvEVrew?editors=0011

javascript codepen array-reduce
1个回答
1
投票

const gems = [
    { type: 'amethyst', price: 8 },
    { type: 'turquoise', price: 50 },
    { type: 'selenite', price: 2 },
    { type: 'topaz', price: 10 },
    { type: 'emerald', price: 500 }
]



const gemsOverTen = gems.reduce((acc, cur) => {
  if (cur.price < 10) return acc;
  return [
    ...acc,
    {
      "type": cur.type,
      "price": cur.price
    }
  ];
}, []);

console.log(gemsOverTen);

如果您不需要新副本:

const gems = [
    { type: 'amethyst', price: 8 },
    { type: 'turquoise', price: 50 },
    { type: 'selenite', price: 2 },
    { type: 'topaz', price: 10 },
    { type: 'emerald', price: 500 }
]

const gemsOverTen = gems.reduce((acc, cur) => {
  if (cur.price < 10) return acc;
  return [
    ...acc,
    cur
  ];
}, []);

console.log(gemsOverTen);

或者只使用推送

const gems = [
    { type: 'amethyst', price: 8 },
    { type: 'turquoise', price: 50 },
    { type: 'selenite', price: 2 },
    { type: 'topaz', price: 10 },
    { type: 'emerald', price: 500 }
]



const gemsOverTen = gems.reduce((acc, cur) => {
  if (cur.price >= 10) acc.push(cur);
  return acc;
}, []);

console.log(gemsOverTen);

© www.soinside.com 2019 - 2024. All rights reserved.