数组映射函数javascript无法正常工作?

时间:2014-07-03 19:07:07

标签: javascript

在下面的代码中,我试图传递realdata [0] = 700&的值。 realdata [1] = 300到绘制方法。

  

return {label:d.label,value:realdata [i],color:d.color}; ++ I;

然而逻辑不起作用?有人可以指导我,我是javascript的新手。

var salesData=[
    {label:"Used", color:"#FF3300"},
    {label:"Free", color:"#00FF00"}
];

Donut3D.draw("salesDonut", randomData(), 150, 150, 150, 120, 30, 0.3);


function randomData(){

    var realdata = [700,300];
    var i=0;

return salesData.map( function(d){  

        return {label:d.label, value:realdata[i], color:d.color}; ++i; 

         } );

    }

2 个答案:

答案 0 :(得分:1)

在您的代码中,您在return语句之后放置了增量逻辑,这意味着i永远不会递增。您可以将逻辑更改为:

 // post increment i inline
 return {label:d.label, value:realdata[i++], color:d.color};

但是,Array.map将传递当前值,当前值的索引和原始数组。

请参阅:MDN - Array.prototype.map

不是单独跟踪索引,而是将randomData函数更改为:

function randomData(){
    var realdata = [700,300];

    return salesData.map( function(d, idx){  
        return {label:d.label, value:realdata[idx], color:d.color}; 
    });
}

将导致:

[{"label":"Used","value":700,"color":"#FF3300"},    
 {"label":"Free","value":300,"color":"#00FF00"}]

答案 1 :(得分:0)

++i无法在return语句之后执行,该语句会停止并退出function。因此,i的值不会在map的迭代之间发生变化。

要解决此问题,您可以在i++语句中使用后缀增量return增量,但返回前值):

return { label: d.label, value: readdata[i++], color: d.color };

或者,.map()将提供索引值作为迭代器的第二个参数:

function randomData(){
    var realdata = [700,300];

    return salesData.map(function (d, i) {
        return { label: d.label, value: readdata[i], color: d.color };
    });
}