JavaScript “map” 函数

标签 javascript functional-programming map-function

查看 map method在 JavaScript 中,我在这里做错了什么?

// Input: [ { name: "Kevin"}, { name: "Bob" } ]
// Output: [ { "Kevin" :0 }, { "Bob": 1 } ]
var map = function(arr, property) {
  var i = 0;
  var m = arr.prototype.map(makeKv);

  // Input: { name: "Kevin" }
  // Output: { "Kevin" = i } // GLOBAL
  
  function makeKv(item) {
    return {
      item: i++
    };
  };

  console.log("m : " + m);
};

JSFiddle

也请帮我摆脱global

最佳答案

这里有几个问题:

首先,

var m = arr.prototype.map(makeKv);

这里不需要prototype。只有在使用构造函数时才使用它,例如 Array.prototype.map。在这里,你只需要做arr.map

其次,

function makeKv(item) {
    return {item: i++};
};

你永远不会在任何地方声明i。你怎么能给不存在的东西加一。在此之前你需要有 var i = 0;

最后,return {item: i++}; 将创建一个名为 literally “item” 的 key 。您需要先声明对象 (var ret = {};),然后使用 [item] 设置值。

Array.map 的回调将数组中的元素作为第一个参数传递,因此 item 将是一个对象。您需要执行 item[property] 以获得您想要的值。

附言不要在 console.log 中执行 "m : "+ m,这将连接字符串,从而将 m 转换为字符串。使用 , 代替:console.log("m : ", m);

所以,大家一起尝试:

var map = function(arr, property) { 
    var i = 0;        
    var m = arr.map(makeKv);

    function makeKv(item) {
        var ret = {};
        ret[item[property]] = i++;
        return ret;
    };

    console.log("m : ", m);
}

演示:http://jsfiddle.net/FgdSj/3/

编辑:Array.map 的回调将数组中的索引作为第二个参数传递,因此 var i = 0;这里不需要:

var map = function(arr, property) {      
    var m = arr.map(makeKv);

    function makeKv(item, index) {
        var ret = {};
        ret[item[property]] = index;
        return ret;
    };

    console.log("m : ", m);
}

演示:http://jsfiddle.net/FgdSj/5/

关于JavaScript “map” 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055112/

相关文章:

JavaScript 形成相同的值

r - 当达到空白值时 Purrr 函数编程错误

kotlin - 如何通过两个属性和排序器对对象列表进行排序

functional-programming - SML 中的组合函数

python - 将 python 惰性映射应用于就地函数?

javascript - 将观察者存储在全局变量中,稍后使用

javascript - 克隆 div 并遍历到里面的内容

javascript - 使用 JavaScript FileReader 显示图像

python - numpy 矩阵行/列上的函数应用

使用对象方法的 Perl 映射