2

是否可以通过对象属性增加(而不是循环)。我知道对象不能保证排序,但我想以任何方式增加它们。

例如,对于一个数组,可以这样做:

arr[index++];

但这不适用于对象:

obj[key++];

因为我不认为 ++ 运算符被定义为用于键。

我不想构建一个复杂的对象结构来存储带有键的索引。我想在本地做。

我很清楚 for-in 结构,但我想根据需要递增,而不是循环。

4

2 回答 2

3

在最近的浏览器中,您可以使用keys数组:

val = Object.keys(o)[i++];

详细示例:

var keys = Object.keys(o);
for (var i=0; i<keys.length; i++) {
    var key = keys[i];
    console.log(key, o[key]);   
}

要与 IE8 兼容,请使用此构造来迭代 keys :

for (var key in o) {
   console.log(key, o[key]);
}

如果您不想迭代继承的属性,请使用hasOwnProperty

for (var key in o) {
    if (o.hasOwnProperty(key) console.log(key, o[key]);
}
于 2012-12-29T18:52:11.413 回答
1

++运算符适用于任何数字:它将数字加一。

如果你的对象的属性是数字,你当然可以用它++来迭代它们:

var obj = { 1: "foo", 2: "bar", 3: "baz" };
var i = 1;
console.log( obj[i++] );
console.log( obj[i++] );
console.log( obj[i++] );

(当然,这样做的一个问题是,一般来说,不能保证对象的属性,即使是数字,也必须是连续的数字。)

现在,dystroy 已经很好地回答了实际问题,所以我不会在这里重复他的回答。我只是想添加这一点来强调这样一个事实,即询问“++操作符是否被定义为用于键”是没有意义的:++操作符不知道或不关心它正在操作的值是数组键还是对象属性名称或生命、宇宙和一切的答案。它所关心的只是它是否是或是否可以被有意义地解释为一个数字。

于 2012-12-29T19:11:22.687 回答