查看 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);
};
也请帮我摆脱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);
}
关于JavaScript “map” 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20055112/