如果有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的键值。

其他回答

var objects={...}; this.getAllvalues = function () {
        var vls = [];
        for (var key in objects) {
            vls.push(objects[key]);
        }
        return vls;
    }

在ECMAScript5中使用

 keys = Object.keys(object);

否则,如果您的浏览器不支持它,请使用众所周知的for. in循环

for (key in object) {
    // your code here
}

这个问题没有指定是否也需要继承的和不可枚举的属性。

获得谷歌不容易找到的所有东西,包括继承的属性和不可枚举的属性,都存在一个问题。

如果我们要获得所有继承的和不可枚举的属性,我的解决方案是:

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);

下面是一个类似于PHP的array_values()函数

function array_values(input) {
  var output = [], key = '';
  for ( key in input ) { output[output.length] = input[key]; }
  return output;
}

如果你使用ES6或更高版本,下面是如何获取对象的值:

Array.from(values(obj));

我认为最简单的选择是这样的:

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(键,索引,值); });