簡體   English   中英

Javascript數組未修改

[英]Javascript array not getting modified

我在“數據”變量中有一些JSON數據。 格式:

{
    "0" : {"names":"Pooja, Trivedi"},
    "1" : {"names":"Pooja, Rooster"}
}

我需要實現一個映射,以便計算不同的名稱:

Pooja = 2
Trivedi = 1
Rooster = 1

這是實現:

map = new Array();
data = jQuery.parseJSON(data);  //convert JSON to object
for (var i = 0; i < data.length; i++) {
  var names = data[i].names.split(','); //split the CSVs
  for (var j = 0; j < names.length; j++) {
    if (map[names[j].trim()] === undefined) {
      map[names[j].trim()] = 1;
    } else {
      map[names[j].trim()]++;
    }
  }
console.log(map); //shows progressively filled arrays
}
console.log(map); //shows [], an empty array

在循環內部,將更新地圖。 但是,在i循環結束之后,我們所擁有的只是一個空數組。 如何解決?

首先,您不想使用for (var i = 0; i < data.length; i++)遍歷您的數據對象,因為Javascript對象沒有像數組那樣的length屬性。 因此,請改用for (var i in data)遍歷對象中的所有鍵。

這有效:

var data = {
  "0" : {"names":"Pooja, Trivedi"},
  "1" : {"names":"Pooja, Rooster"}
}

var map = {};
for (var i in data) {
  var names = data[i].names.split(',');
  for (var j in names) {
    var name = names[j].trim();
    if (map[name]) {
      map[name]++;
    } else {
      map[name] = 1;
    }
  }
  console.log(map); //shows progressively filled arrays
}
console.log(map); //shows the full array

而且您不想使用數組作為地圖。 您應該改為使用對象。

我更喜歡這個版本:

var data = {
    "0" : {"names":"Pooja, Trivedi"},
    "1" : {"names":"Pooja, Rooster"}
};

var nameCounts = {};

for (var item in data) {
    data[item].names.split(", ").forEach(function (name) {
        if (name in nameCounts) {
            nameCounts[name]++;
        } else {
            nameCounts[name] = 1;
        }
    });
}

console.log(nameCounts);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM