如果有JavaScript对象:

var objects={...};

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


当前回答

兼容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兼容,你就不需要更改代码中的任何内容。

其他回答

我知道我来晚了一点,但这是新firefox 47 Object的垫片。值方法

Object.prototype.values = Object.prototype.values || function(obj) {
  return this.keys(obj).map(function(key){
    return obj[key];
  });
};

你可以循环遍历键:

foo = {one:1, two:2, three:3};
for (key in foo){
    console.log("foo["+ key +"]="+ foo[key]);
}

将输出:

foo[one]=1
foo[two]=2
foo[three]=3

我们可以使用以下三种方法获取数据

使用地图功能

data.map( item => { console.log(item) }

使用for循环

for( let i = 0; i < data.length; i++){
   console.log(item);
}

使用for in循环

for(key in data) {
    if(data.hasOwnProperty(key)) {
       const value = data[key];
       console.log(value);
    }
}

如果你真的想要一个值数组,我发现这比用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的键值。

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

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