我试图从对象数组中删除一个属性名称,它使用filter 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之前的相同示例,它并不像预期的那样工作。
发布于 2020-07-01 17:47:44
您实际上希望为此使用map,因为您正在选择将数据转换为一个新对象(类似于SQL或LINQ中的selecting或LINQ)。
const myProps = users.map(u=> ({age: u.age}))
此外,虽然过滤器方法有效,但这实际上是对过滤器方法的滥用。过滤器方法应该根据条件从数组中删除元素。您的方法可以工作,因为您返回true (它没有删除任何元素),但是在每次迭代中修改了当前值。
这是错误的做法,因为您会混淆下一个查看您的代码的人,他们会想为什么您使用过滤器作为转换数据的方法,而不是映射。
另外,也不要使用reduce,因为reduce是一个聚合函数,用于对对象执行聚合函数。因为您返回的元素的数量是相同的,所以map对此更好。
如果你想找出平均、最大、最小、中位年龄或最受欢迎的名字等等,减缩会更适合.
https://stackoverflow.com/questions/62682508
复制相似问题