繁体   English   中英

JavaScript数组无法正确建立索引?

[英]JavaScript Array not indexing properly?

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() ,我可以正确输出分数,但是之后这些值消失了,我不确定为什么。

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

看起来你想要的是

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

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

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

您可以这样做:

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

解释

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

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

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

map()不能这样工作。

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

详情如下: https : //developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/map

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM