如果有JavaScript对象:

var objects={...};

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


当前回答

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

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

其他回答

对于那些早期适应CofeeScript时代的人来说,这里有另一个等价的东西。

val for key,val of objects

这可能比这样更好,因为可以减少对象,重新键入,降低可读性。

objects[key] for key of objects

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

Object.values = function (obj) {
    var vals = [];
    for( var key in obj ) {
        if ( obj.hasOwnProperty(key) ) {
            vals.push(obj[key]);
        }
    }
    return vals;
}
const object1 = {
  a: 'somestring',
  b: 42
};

for (let [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}

// expected output:
// "a: somestring"
// "b: 42"
// order is not guaranteed

使用:object .values(),我们传入一个对象作为参数,并接收一个数组的值作为返回值。

这将返回给定对象的可枚举属性值的数组。你将得到与使用for in循环相同的值,但没有Prototype上的属性。下面这个例子可能会让事情更清楚:

函数人(姓名){ This.name = name; } Person.prototype.age = 5; 让dude =新人('dude'); 对于(让道具在伙计){ console.log(老兄[支持]);// for in仍然显示年龄,因为这是在原型上 } //我们可以使用hasOwnProperty,但这不是很优雅 // es6 + console.log (Object.values(伙计)); //非常简洁,我们不显示原型上的道具

ECMA2017开始:

Object.values(obj)将以数组的形式获取所有属性值。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_objects/Object/values