首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下划线_.each和_.map之间真正的区别是什么?

下划线_.each和_.map之间真正的区别是什么?
EN

Stack Overflow用户
提问于 2014-08-28 15:47:00
回答 4查看 10.7K关注 0票数 24

我用的是UnderscoreJs。请考虑以下代码:

代码语言:javascript
复制
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并不重要。结果完全一样。

在上述情况下,两者之间的真正区别是什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-28 15:51:06

map是一种函数映射方法:它的函数参数应该返回一个值,但不会产生任何副作用。

each只是一个命令式for循环的功能替代:它的目的是产生效果,并且它不会返回任何值。

例如,这将是对map更合适的使用

代码语言:javascript
复制
var docs = getDocs();
var docTitles = _.map(docs, function (doc){
    return doc.title;
});
// expect `docs` to be unchanged

而这将是each的适当用途。

代码语言:javascript
复制
var docs = getDocs();
_.each(docs, function (doc){
    delete doc.niche;
});
// expect `docs` to be altered.
票数 32
EN

Stack Overflow用户

发布于 2014-08-28 15:50:49

_.each(列表,迭代)

对元素列表进行迭代,生成每个元素依次为迭代器函数。 每次调用iteratee都带有三个参数:(元素、索引、列表)。如果list是JavaScript对象,迭代器的参数将是(值、键、列表)。返回用于链接的列表。

代码语言:javascript
复制
_.each({one: 1, two: 2, three: 3}, alert);
=> alerts each number value in turn...

_.map(列表,迭代)

通过转换函数(iteratee)映射列表中的每个值,生成一个新的值数组。 如果list是JavaScript对象,迭代器的参数将是(值、键、列表)。

代码语言:javascript
复制
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]

请参阅文档

票数 8
EN

Stack Overflow用户

发布于 2014-08-28 15:53:33

您认为结果“完全相同”的断言是不正确的。_.each()函数返回原始列表,但_.map()返回一个新列表。您正在直接修改原始对象,因此在每个列表中都有对相同对象的引用,但是对于_.map(),您将得到两个单独的数组实例。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25552952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档