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()
,我可以获得正确的分数输出,但之后这些值消失,我不知道为什么。
答案 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] }
});
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