【发布时间】:2014-06-24 15:16:37
【问题描述】:
在一系列数组操作方法中,我想更改数组中每个项目的属性。
以这种方式使用时,每个可用的方法都会出现问题:
- Array.prototype.forEach 不返回数组
- Array.prototype.map 要求返回每一项
- Array.prototype.filter 要求为每个项目返回一个“真”值
Array 是否有一个方法可以操作数组中的每一项,并返回该数组?
我已经使用了map 或filter,但这感觉像是一种没有必要的解决方法。
一个人为的例子:
var items = [
{ name: 'Smith' },
{ name: 'Jones' },
{ name: 'Simpson' }
];
过滤器:
return items.filter(function(item) {
item.fullname = 'Professor ' + item.name;
return true;
});
地图:
return items.map(function(item) {
item.fullname = 'Professor ' + item.name;
return item;
});
forEach:
items.forEach(function(item) {
item.fullname = 'Professor ' + item.name;
});
return items;
??:
return items.someMethod(function(item) {
item.fullname = 'Professor ' + item.name;
});
【问题讨论】:
-
forEach在这里可能是最正确的,因为它说“对于每个项目,将其 fullname 属性设置为 'Professor' name”。 -
一般来说,链接东西通常意味着你试图一次做太多事情。在我看来,无论如何。
-
既然你想要一个方法“允许数组中的每一项都被操作,并返回数组?”,
map不是显而易见的吗?还是我不确定问题出在哪里? -
Array.prototype.each = function(){ this.forEach.apply(this, arguments); return this; };可能会 -
"item.fullname = '教授' + item.name;"并不比“return item.fullname = 'Professor' + item.name, 1;”短很多,这让你更容易“滥用”过滤器......
标签: javascript arrays