簡體   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