如果有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]
其他回答
对于那些早期适应CofeeScript时代的人来说,这里有另一个等价的东西。
val for key,val of objects
这可能比这样更好,因为可以减少对象,重新键入,降低可读性。
objects[key] for key of objects
现在我使用Dojo Toolkit,因为旧的浏览器不支持Object.values。
require(['dojox/lang/functional/object'], function(Object) {
var obj = { key1: '1', key2: '2', key3: '3' };
var values = Object.values(obj);
console.log(values);
});
输出:
['1', '2', '3']
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
这个问题没有指定是否也需要继承的和不可枚举的属性。
获得谷歌不容易找到的所有东西,包括继承的属性和不可枚举的属性,都存在一个问题。
如果我们要获得所有继承的和不可枚举的属性,我的解决方案是:
function getAllPropertyNames(obj) {
let result = new Set();
while (obj) {
Object.getOwnPropertyNames(obj).forEach(p => result.add(p));
obj = Object.getPrototypeOf(obj);
}
return [...result];
}
然后遍历它们,只需要使用for-of循环:
函数getAllPropertyNames(obj) { let result = new Set(); While (obj) { Object.getOwnPropertyNames (obj)。forEach(p => result.add(p)); obj = Object.getPrototypeOf(obj); } 返回结果[…]; } 让obj = { 美国广播公司(abc): 123, 某某:1.234, foobar:“你好” }; for (p of getAllPropertyNames(obj)) console.log(p);
我认为最简单的选择是这样的:
Object.keys(data).forEach(function (key, index) {
var value = data[key];
console.log(key, index, value);
});
例如,这里添加了一个可运行的代码:
Const user = { 名称:“亚历克斯”, 年龄:30岁 }; 种(用户)。forEach(函数(键,索引){ Var值= user[key]; Console.log(键,索引,值); });