JavaScript的“地图”功能(JavaScript “map” Function)

2019-10-19 00:17发布

看着地图功能在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);
}

http://jsfiddle.net/FgdSj/2

另外,如果你能帮助我高兴摆脱了全球的太多。

Answer 1:

这里有几个问题:

第一,

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 ,将Concat的字符串,从而把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);
}

DEMO: 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);
}

DEMO: http://jsfiddle.net/FgdSj/5/



Answer 2:

arr.prototype.map(makeKv);

应该

arr.map(makeKv);

现在你有另外一个问题,因为它会返回

[ { item : 0}, { item : 1} ]

如果你改变了映射功能

function makeKv(item) {
    var x = {}
    x[item.name] = i++;        
    return x;
};

它会给你想要的东西。

的jsfiddle



Answer 3:

只需致电.map直接

arr.map(makeKv)

我,无论出于何种原因(也许map将被覆盖),要使用Array.prototype的方法

[].map.call(arr, makeKv);

这里,这一切都帮你搞掂,以符合您需要的输出

// input: [{name: "Kevin"}, {name: "Bob"}], "name"
var map = function(arr, property) { 
    var i = 0; 

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

    return arr.map(makeKv);
}

var result = map([{name: "Kevin"}, {name: "Bob"}], "name");
console.log(result);
// [{"Kevin" : 0}, {"Bob" : 1}];


Answer 4:

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

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

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

map();


文章来源: JavaScript “map” Function