Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线u0.each和0.map之间的真正区别是什么?_Javascript_Node.js - Fatal编程技术网

Javascript 下划线u0.each和0.map之间的真正区别是什么?

Javascript 下划线u0.each和0.map之间的真正区别是什么?,javascript,node.js,Javascript,Node.js,我用的是下划线。考虑这个代码: 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; });

我用的是下划线。考虑这个代码:

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
都无所谓。结果完全一样

在上面的例子中,两者之间的真正区别是什么?

\每个(列表,迭代对象) 迭代元素列表,依次生成一个iteratee函数

每次调用iteratee都使用三个参数进行调用:(元素、索引、列表)。若列表是一个JavaScript对象,迭代对象的参数将是(值、键、列表)。返回用于链接的列表

_.map(列表,迭代对象) 通过转换函数(iteratee)映射列表中的每个值,生成一个新的值数组

若列表是一个JavaScript对象,迭代对象的参数将是(值、键、列表)


请参见

映射
是一种函数映射方法:其函数参数应返回一个值,但预计不会产生任何副作用

每个
都只是循环的命令式
的功能替代品:其目的是产生效果,并且不希望返回任何值

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

var docs = getDocs();
var docTitles = _.map(docs, function (doc){
    return doc.title;
});
// expect `docs` to be unchanged
而这将是对每个
的适当使用:

var docs = getDocs();
_.each(docs, function (doc){
    delete doc.niche;
});
// expect `docs` to be altered.

你声称结果“完全相同”是不真实的。函数返回原始列表,但返回新列表。您在执行时直接修改原始对象,因此每个列表中都会引用相同的对象,但如果使用
.map()
,则会得到两个单独的数组实例。

您只需查看源代码即可看出区别:

  • :


什么库,下划线?阅读,查找它并不难。
.each()
迭代,
.map()
项目,即使用指定的函数构建新元素,从作为输入传递的数组构建一个新数组。一个迭代,一个收集?你有一个病态的例子,你运行它的副作用。我向上投票来平衡向下投票,我认为这是一个很好的问题,谁不同意地图功能。只要看看回复的数量。。。以及其中两个的卓越品质。
var docs = getDocs();
var docTitles = _.map(docs, function (doc){
    return doc.title;
});
// expect `docs` to be unchanged
var docs = getDocs();
_.each(docs, function (doc){
    delete doc.niche;
});
// expect `docs` to be altered.
_.each = _.forEach = function(obj, iteratee, context) {
    if (obj == null) return obj;
    iteratee = createCallback(iteratee, context);
    var i, length = obj.length;
    if (length === +length) {
      for (i = 0; i < length; i++) {
        iteratee(obj[i], i, obj);
      }
    } else {
      var keys = _.keys(obj);
      for (i = 0, length = keys.length; i < length; i++) {
        iteratee(obj[keys[i]], keys[i], obj);
      }
    }
    return obj;
};
_.map = _.collect = function(obj, iteratee, context) {
    if (obj == null) return [];
    iteratee = _.iteratee(iteratee, context);
    var keys = obj.length !== +obj.length && _.keys(obj),
        length = (keys || obj).length,
        results = Array(length),
        currentKey;
    for (var index = 0; index < length; index++) {
      currentKey = keys ? keys[index] : index;
      results[index] = iteratee(obj[currentKey], currentKey, obj);
    }
    return results;
};