通过对象属性递增?

时间:2012-12-29 18:50:57

标签: javascript

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

例如,对于数组,我们可以这样做:

arr[index++];

但这对一个对象不起作用:

obj[key++];

因为我不认为++运算符被定义为在键上使用。

我不想构建一个使用键存储索引的复杂对象结构。我想本地做。

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

2 个答案:

答案 0 :(得分: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兼容,请使用此构造迭代键:

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]);
}

答案 1 :(得分:1)

++ operator适用于任何号码:它会将该号码加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已经很好地回答了实际的问题,所以我不会在这里重复他的回答。我只想添加这一点来强调这样一个事实,即询问“++运算符是否定义为在键上使用”这一事实缺少重点:++运算符不知道或不关心关于它所操作的值是数组键还是对象属性名称或the answer to life, the universe and everything。所有它关心的是它是否,或者可以被有意义地解释为数字。