这里有几个问题:
第一的,
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/