繁体   English   中英

使用 reduce API 从 object 数组中删除一个属性

[英]Remove a property from array of object using reduce API

我正在尝试从 object 的数组中删除一个属性名称,它使用过滤器API 正常工作,

const users = [
  { name: 'Tyler', age: 28},
  { name: 'Mikenzi', age: 26},
  { name: 'Blaine', age: 30 }
];


const myProp = users.filter(function (props) {
  delete props.name;
  return true;
});
console.table(myProp);
const myProp2 = users.reduce((people, user) => {
  console.log(people);
  console.log(user);
  delete user.name;
  return people;
}, []);

console.log(myProp2);

在我尝试使用reduce API 完成之前的相同示例,但是,它没有按预期工作。

You actually want to use map for this, because you are selecting a transormation of the data into a new object (similar to Select in SQL or LINQ)

const myProps = users.map(u=> ({age: u.age}))

此外,虽然 filter 方法有效,但这实际上是 filter 方法的滥用。 filter 方法应该根据条件从数组中删除元素。 您的方法有效,因为您返回 true (未删除任何元素),但您在每次迭代中修改了当前值。

这是不好的做法,因为您会混淆下一个查看您的代码的人,他们会想知道为什么您使用过滤器作为一种方法来转换数据而不是 map。

也不要使用 reduce,因为 reduce 是一个聚合 function 旨在对对象执行聚合函数。 由于您返回的元素数量相同,因此 map 更适合此操作。

如果您想找出平均值、最大值、最小值、中位年龄或最受欢迎的名称等,Reduce 会更适合...

它不起作用,因为您没有推送到前一个元素(您总是返回空数组)。 您需要将其更改为:

const myProp2 = users.reduce((people, user) => {
 delete user.name;
  people.push(user)
  return people;
}, []);

请注意,这不是reduce though的预期用途 - map是您正在寻找的操作:

const myProp2 = users.map(u=> ({age: u.age}));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM