如何获取JavaScript对象的所有属性值(不知道键名)?

552
如果有一个 JavaScript 对象:
var objects={...};

假设一个对象拥有50个以上的属性,不知道这些属性名(也就是不知道'keys'),如何在循环中获取每个属性的值?


27
读者请注意:不要错过非常有见地的第二个答案 - Pandaiolo
可能是如何列出JavaScript对象的属性的重复问题。 - Nerdroid
25个回答

3

据我最近了解,这是最快的方法:

var objs = {...};
var objKeys = Object.keys(obj);
for (var i = 0, objLen = objKeys.length; i < objLen; i++) {
    // do whatever in here
    var obj = objs[objKeys[i]];
}

你能否提供一个 CodePen 或 JSFiddle 的示例代码?谢谢。 - Chris22

3

可以使用类似于 polyfill 的东西:

if(!Object.values){Object.values=obj=>Object.keys(obj).map(key=>obj[key])}

然后使用。
Object.values(my_object)

3) 利润!


3

对于那些早期采用CofeeScript的人,这里有另一个等效的选择。

val for key,val of objects

这可能比现有的更好,因为对象可以被简化为再次输入并减少可读性。

objects[key] for key of objects

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

1
我意识到有点晚了,但这是适用于新的 Firefox 47 Object.values 方法的垫片。请注意,保留了HTML标签。
Object.prototype.values = Object.prototype.values || function(obj) {
  return this.keys(obj).map(function(key){
    return obj[key];
  });
};

1

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

Object.keys(data).forEach(function (key, index) {
  var value = data[key];
  console.log(key, index, value);
});

例如,这里添加了一个可运行的代码:

const user = {
    name: 'Alex',
    age: 30,
};

Object.keys(user).forEach(function (key, index) {
  var value = user[key];
  console.log(key, index, value);
});


1
使用Object.values(),我们将一个对象作为参数传入,并接收一个值的数组作为返回值。
这将返回一个给定对象自身可枚举属性值的数组。您将获得与使用for in循环相同的值,但不包括原型上的属性。以下示例可能会使事情更清晰:

function person (name) {
  this.name = name;
}

person.prototype.age = 5;

let dude = new person('dude');

for(let prop in dude) {
  console.log(dude[prop]);     // for in still shows age because this is on the prototype
}                              // we can use hasOwnProperty but this is not very elegant

// ES6 + 
console.log(Object.values(dude));
// very concise and we don't show props on prototype


1

Object.entries以更好的方式执行它。

  var dataObject = {"a":{"title":"shop"}, "b":{"title":"home"}}
 
   Object.entries(dataObject).map(itemArray => { 
     console.log("key=", itemArray[0], "value=", itemArray[1])
  })


0

兼容ES7,即使一些浏览器尚未支持

自从Object.values(<object>)内置于ES7中以来,

在等待所有浏览器支持它之前,您可以将其包装在函数中:

Object.vals=(o)=>(Object.values)?Object.values(o):Object.keys(o).map((k)=>o[k])

然后:

Object.vals({lastname:'T',firstname:'A'})
 // ['T','A']

一旦浏览器兼容ES7,您将不需要改变代码中的任何内容。


0

我们可以使用以下三种方法获取数据

使用 map 函数

data.map( item => { console.log(item) }

使用 for 循环

for( let i = 0; i < data.length; i++){
   console.log(item);
}

使用 for 循环

for(key in data) {
    if(data.hasOwnProperty(key)) {
       const value = data[key];
       console.log(value);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接