JavaScript数组没有正确索引?

时间:2017-07-27 20:03:05

标签: javascript arrays dictionary

var graphdata = [["A", "B", "C", "D"], [0.5, 0.25, 0.5, 0.25]];

function randomData (){
    var labels = graphdata[0]
    var labels2 = graphdata[1];
    console.log();
    return labels.map(function(labels, labels2){
        console.log(labels2);
        return { label: labels , value: labels2 }
    });
}

labels正确迭代A,B,C,D。但labels2被压扁为0,1,2,3,我不知道为什么。在return labels.map()调用之前,如果我console.log(),我可以获得正确的分数输出,但之后这些值消失,我不知道为什么。

4 个答案:

答案 0 :(得分:4)

赋予map回调的第二个参数是迭代中元素的索引。

看起来你想要的是什么

return labels.map(function(label, i){
    return { label: label , value: labels2[i] }
});

答案 1 :(得分:2)

Array.map()使用当前元素当前索引(可选)和原始数组的参数进行回调(可选)。

randomArray.map(function(currentElement, currentIndex, randomArrayAgain) { /*...*/})

你可以这样做:

labels.map(function(label, index) {
    return { label: label, value: labels2[index] }
});

Explanaion

map()将迭代labels,并且在每次迭代中您都可以访问当前标签和索引。只有在以正确的方式对数组进行排序时,此解决方案才有效。

答案 2 :(得分:1)

请阅读map here的文档。 map函数的回调有两个参数,第一个是列表中要迭代的每个项目,第二个是列表中该项目的索引或键。地图回调中的labels2变量不是指您创建的变量,而是指被映射项目的索引。您的实现可以写成如下,它将是相同的。

labels.map(function(eachLabel, key) {
    console.log(key); // 0, 1, 2, 3... (label.length - 1)
    return { label: eachLabel , value: key }
  });

答案 3 :(得分:0)

map()无法正常工作。

map()的第二个参数是它当前正在查看的元素的索引。因此,每次通过它都会将第一个参数labels设置为labels中的元素,该元素当前将集合labels2映射到labels的索引。

以下是更多:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map