这里有几个问题:
第一的,
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++};
将创建一个名为字面意思 "item"
的键。您需要先声明对象 ( var ret = {};
),然后使用[item]
来设置值。
Array.map
的回调将数组中的元素作为第一个参数传递,因此item
将是一个对象。你需要做item[property]
才能得到你想要的价值。
PS不要"m : " + m
在你的console.log
,这将连接字符串,从而转换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/