我用的是UnderscoreJs。请考虑以下代码:
var docs = [
{name : 'Anders', niche : 'Web Development'},
{name : 'Johnny', niche : 'Design'},
{name : 'Eric', niche : 'PhotoShop'}
];
var newDocs = _.map(docs, function (doc){
delete doc.niche;
return doc;
});我在这里使用.each或.map并不重要。结果完全一样。
在上述情况下,两者之间的真正区别是什么?
发布于 2014-08-28 15:51:06
map是一种函数映射方法:它的函数参数应该返回一个值,但不会产生任何副作用。
each只是一个命令式for循环的功能替代:它的目的是产生效果,并且它不会返回任何值。
例如,这将是对map更合适的使用
var docs = getDocs();
var docTitles = _.map(docs, function (doc){
return doc.title;
});
// expect `docs` to be unchanged而这将是each的适当用途。
var docs = getDocs();
_.each(docs, function (doc){
delete doc.niche;
});
// expect `docs` to be altered.发布于 2014-08-28 15:50:49
_.each(列表,迭代)
对元素列表进行迭代,生成每个元素依次为迭代器函数。 每次调用iteratee都带有三个参数:(元素、索引、列表)。如果list是JavaScript对象,迭代器的参数将是(值、键、列表)。返回用于链接的列表。
_.each({one: 1, two: 2, three: 3}, alert);
=> alerts each number value in turn..._.map(列表,迭代)
通过转换函数(iteratee)映射列表中的每个值,生成一个新的值数组。 如果list是JavaScript对象,迭代器的参数将是(值、键、列表)。
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]请参阅文档
发布于 2014-08-28 15:53:33
您认为结果“完全相同”的断言是不正确的。_.each()函数返回原始列表,但_.map()返回一个新列表。您正在直接修改原始对象,因此在每个列表中都有对相同对象的引用,但是对于_.map(),您将得到两个单独的数组实例。
https://stackoverflow.com/questions/25552952
复制相似问题