如果有JavaScript对象:
var objects={...};
假设,它有超过50个属性,不知道属性名称(即不知道“键”)如何在循环中获得每个属性值?
如果有JavaScript对象:
var objects={...};
假设,它有超过50个属性,不知道属性名称(即不知道“键”)如何在循环中获得每个属性值?
当前回答
如果你真的想要一个值数组,我发现这比用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]
使用像这样的填充材料:
if(!Object.values){Object.values=obj=>Object.keys(obj).map(key=>obj[key])}
然后使用
Object.values(my_object)
3)利润!
我知道我来晚了一点,但这是新firefox 47 Object的垫片。值方法
Object.prototype.values = Object.prototype.values || function(obj) {
return this.keys(obj).map(function(key){
return obj[key];
});
};
这个问题没有指定是否也需要继承的和不可枚举的属性。
获得谷歌不容易找到的所有东西,包括继承的属性和不可枚举的属性,都存在一个问题。
如果我们要获得所有继承的和不可枚举的属性,我的解决方案是:
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);
var objects={...}; this.getAllvalues = function () {
var vls = [];
for (var key in objects) {
vls.push(objects[key]);
}
return vls;
}