为什么我不能迭代这个JavaScript对象?

时间:2017-01-05 00:54:30

标签: javascript jquery

我有这个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/

3 个答案:

答案 0 :(得分:3)

您的逻辑问题是,$.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()是一项实验性技术。由于此技术的规范尚未稳定,请在各种浏览器中查看compatibility table的使用情况。另请注意,随着规范的更改,实验技术的语法和行为可能会在未来版本的浏览器中发生变化。

没有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);

答案 1 :(得分:3)

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

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

纯Javascript解决方案可能是:

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

答案 2 :(得分:1)

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

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()方法。