如果有JavaScript对象:
var objects={...};
假设,它有超过50个属性,不知道属性名称(即不知道“键”)如何在循环中获得每个属性值?
如果有JavaScript对象:
var objects={...};
假设,它有超过50个属性,不知道属性名称(即不知道“键”)如何在循环中获得每个属性值?
当前回答
ES5 Object.keys
var a = { a: 1, b: 2, c: 3 };
Object.keys(a).map(function(key){ return a[key] });
// result: [1,2,3]
其他回答
通过使用简单的for..in循环:
for(var key in objects) {
var value = objects[key];
}
如果你真的想要一个值数组,我发现这比用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(),我们传入一个对象作为参数,并接收一个数组的值作为返回值。
这将返回给定对象的可枚举属性值的数组。你将得到与使用for in循环相同的值,但没有Prototype上的属性。下面这个例子可能会让事情更清楚:
函数人(姓名){ This.name = name; } Person.prototype.age = 5; 让dude =新人('dude'); 对于(让道具在伙计){ console.log(老兄[支持]);// for in仍然显示年龄,因为这是在原型上 } //我们可以使用hasOwnProperty,但这不是很优雅 // es6 + console.log (Object.values(伙计)); //非常简洁,我们不显示原型上的道具
你可以循环遍历键:
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
对于那些早期适应CofeeScript时代的人来说,这里有另一个等价的东西。
val for key,val of objects
这可能比这样更好,因为可以减少对象,重新键入,降低可读性。
objects[key] for key of objects