簡體   English   中英

為什么我不能迭代這個JavaScript對象?

[英]Why cant I iterate over this JavaScript object?

我有這個javascript對象..

var obj = {
    '02/08/2016': 2,
    '03/10/2016': 4,
    '04/05/2016': 2,
    '04/06/2016': 35,
    '04/19/2016': 4,
    '04/26/2016': 22,
    '05/09/2016': 15,
    '05/24/2016': 2,
    '05/30/2016': 4,
    '07/14/2016': 7,
    '08/18/2016': 200
};

// Does not work
$(obj).each(function(index,value) {
  console.log(index);
  console.log(value);
});

// Does not work, also what does putting it in bracket notation do here?
var labels = $.map(obj, function(index, value) { 
   return [index];  
});

為什么我不能迭代對象? 我試圖將這些數據放在chart.js的兩個獨立數組(如下所示)中

var arr1 = ['02/08/2016', '03/10/2016', '04/05/2016', ..];
var arr2 = [2, 4, 2, ...];

代碼小提琴: https//jsfiddle.net/zjgb6ez4/

您的邏輯問題是, $.each()有兩個簽名:

$(selector).each(function(index,value) {...} // For HTML DOM selectors.
$.each(obj, function(index,value) {...}      // For JavaScript Objects & Arrays.

您使用的是jQuery選擇器,DOM迭代。 這種方式專門用於迭代JavaScript對象或數組。

此外,因為你需要兩個數組。 您不能使用eachmap函數,因為它們只返回一個數組。 相反,最好使用Object.keysObject.values()

 var obj = { '02/08/2016': 2, '03/10/2016': 4, '04/05/2016': 2, '04/06/2016': 35, '04/19/2016': 4, '04/26/2016': 22, '05/09/2016': 15, '05/24/2016': 2, '05/30/2016': 4, '07/14/2016': 7, '08/18/2016': 200 }; var arr1 = Object.keys(obj); var arr2 = Object.values(obj); console.log(arr1); console.log(arr2); 

注意: Object.values()是一種實驗技術。 由於此技術的規范尚未穩定,請檢查兼容性表以了解各種瀏覽器的用法。 另請注意,隨着規范的更改,實驗技術的語法和行為可能會在未來版本的瀏覽器中發生變化。

沒有Object.values()

 var obj = { '02/08/2016': 2, '03/10/2016': 4, '04/05/2016': 2, '04/06/2016': 35, '04/19/2016': 4, '04/26/2016': 22, '05/09/2016': 15, '05/24/2016': 2, '05/30/2016': 4, '07/14/2016': 7, '08/18/2016': 200 }; var arr1 = Object.keys(obj); var arr2 = arr1.map(function (v) { return obj[v]; }); console.log(arr1); console.log(arr2); 

使用jQuery迭代普通對象,您需要使用$.each()

$.each(obj, function(index,value) {...}

純Javascript解決方案可能是:

for (var index in obj) {
    console.log(index);
    console.log(obj[index]);
}

您可以在Object上使用keys()values()方法。

var obj = {
    '02/08/2016': 2,
    '03/10/2016': 4,
    '04/05/2016': 2,
    '04/06/2016': 35,
    '04/19/2016': 4,
    '04/26/2016': 22,
    '05/09/2016': 15,
    '05/24/2016': 2,
    '05/30/2016': 4,
    '07/14/2016': 7,
    '08/18/2016': 200
};
var arr1 = Object.keys(obj);
var arr2 = Object.values(obj);

這是一個簡單的JavaScript解決方案,沒有jQuery。 但請注意,所有瀏覽器都不支持values()方法。

暫無
暫無

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

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