如果有JavaScript对象:

var objects={...};

假设,它有超过50个属性,不知道属性名称(即不知道“键”)如何在循环中获得每个属性值?


当前回答

在ECMAScript5中使用

 keys = Object.keys(object);

否则,如果您的浏览器不支持它,请使用众所周知的for. in循环

for (key in object) {
    // your code here
}

其他回答

显然,正如我最近了解到的,这是最快的方法:

var objs = {...};
var objKeys = Object.keys(obj);
for (var i = 0, objLen = objKeys.length; i < objLen; i++) {
    // do whatever in here
    var obj = objs[objKeys[i]];
}

下面是一个可重用的函数,用于将值放入数组中。它还考虑了原型。

Object.values = function (obj) {
    var vals = [];
    for( var key in obj ) {
        if ( obj.hasOwnProperty(key) ) {
            vals.push(obj[key]);
        }
    }
    return vals;
}

兼容ES7,甚至一些浏览器还不支持它

因为object .values(<object>)将内置在ES7 &

在等待所有浏览器支持它之前,你可以将它包装在一个函数中:

Object.vals=(o)=>(Object.values)?Object.values(o):Object.keys(o).map((k)=>o[k])

然后:

Object.vals({lastname:'T',firstname:'A'})
 // ['T','A']

一旦浏览器与ES7兼容,你就不需要更改代码中的任何内容。

如果你真的想要一个值数组,我发现这比用for…在循环。

ECMA 5.1 +

function values(o) { return Object.keys(o).map(function(k){return o[k]}) }

值得注意的是,在大多数情况下,你并不需要一个值数组,这样做会更快:

for(var k in o) something(o[k]);

这将遍历对象o的键值。在每次迭代中,k被设置为o的键值。

如果你可以访问Underscore.js,你可以使用_. js。价值观的作用是这样的:

_.values({one : 1, two : 2, three : 3}); // return [1, 2, 3]