我用下面的代码创建了一个数组:
var widthRange = new Array();
widthRange[46] = { min:0, max:52 };
widthRange[66] = { min:52, max:70 };
widthRange[90] = { min:70, max:94 };
我想在一个循环中得到46、66、90这三个值。我尝试了for (var key in widthRange)
,但这给了我一大堆额外的属性(我假设它们是对象上的函数)。我不能使用常规的for循环,因为值不是连续的。
发布于 2010-03-25 00:29:28
您需要调用hasOwnProperty
函数来检查是否在对象本身(与其原型相反)上实际定义了该属性,如下所示:
for (var key in widthRange) {
if (key === 'length' || !widthRange.hasOwnProperty(key)) continue;
var value = widthRange[key];
}
请注意,您需要对length
进行单独检查。
但是,您在这里根本不应该使用数组;您应该使用常规对象。所有Javascript对象都作为关联数组运行。
例如:
var widthRange = { }; //Or new Object()
widthRange[46] = { sel:46, min:0, max:52 };
widthRange[66] = { sel:66, min:52, max:70 };
widthRange[90] = { sel:90, min:70, max:94 };
发布于 2014-01-15 09:24:29
可以使用Object.keys(array)
查询字符串化的键。
发布于 2015-12-01 19:59:19
假设您的数组看起来像arr = [ { a: 1, b: 2, c: 3 }, { a: 4, b: 5, c: 6 }, { a: 7, b: 8, c: 9 } ]
(或者可能是其他键),您可以这样做
arr.map((o) => {
return Object.keys(o)
}).reduce((prev, curr) => {
return prev.concat(curr)
}).filter((col, i, array) => {
return array.indexOf(col) === i
});
["a", "b", "c"]
https://stackoverflow.com/questions/2509432
复制相似问题