如何遍历这个 JavaScript 对象?

3
我有一个如下所示的对象——

var objResult = {0:{name:"xyz"}, 1:{name:"pqr"}, 2:{name:"abc"}};

我获取单个值,例如:

console.log(objResult[0].name); // xyz
console.log(objResult[1].name); // pqr

所以当我迭代时,我认为使用for循环就可以了,但是objResult.length给出了undefined的值。
for(var i =0;i< objResult.length; i++){
console.log(objResult[i]);
}

你能帮我解决如何做这件事吗?


2
一个对象不会像数组一样自动具有length属性。此外,对象的属性是无序的,不能保证所有浏览器以相同的顺序获取它们。 - Kaddath
@Kaddath 现代浏览器在 ES 2015 中保证了一定程度的属性排序 https://www.stefanjudis.com/today-i-learned/property-order-is-predictable-in-javascript-objects-since-es2015/ - connexo
@connexo 完全同意,但你不能保证人们会使用现代浏览器(除非你特别指定)。 - Kaddath
7个回答

4

3
不要使用对象,改用数组:
var arrResult = [{name:"xyz"}, {name:"pqr"}, {name:"abc"}];

这将具有 .length 属性,并且可以使用 for … of 循环进行正常迭代。

如果您实际上获得了一个对象,请最好将其转换为数组:

var objResult = {0:{name:"xyz"}, 1:{name:"pqr"}, 2:{name:"abc"}};
var arrResult = Object.assign([], objResult);

1
另一种方法是使用Object.keys()方法。它返回对象中的键列表,然后您可以迭代该列表以获取值。
for(let key in Object.keys(objResult)) {
    console.log(objResult[key]);
}

1
“for...in” 结构允许您遍历对象上的所有键,即使是未拥有的。
语法如下: ‘for (const key in this) { }’

1
你可以使用 Object.valuesObject.entries,甚至可以使用 Object.keys,取决于你需要什么对象本身的内容,然后使用 forEachmap 迭代这些结果(因为它们现在是一个数组)。

var objResult = {0:{name:"xyz"}, 1:{name:"pqr"}, 2:{name:"abc"}};

Object.values(objResult).forEach(({name}) => console.log(name));

var objResult = {0:{name:"xyz"}, 1:{name:"pqr"}, 2:{name:"abc"}};

Object.entries(objResult).forEach(([k,{name}]) => console.log(name))

To access how many keys your object includes run the following:

var objResult = {0:{name:"xyz"}, 1:{name:"pqr"}, 2:{name:"abc"}};
    lgth      = Object.keys(objResult).length;

console.log(lgth);

为什么我在这种情况下没有使用map,而是使用forEachmap的存在是为了创建现有值的副本并对其进行映射/转换,这不是我想要的console.log


0

当使用 ES5 或更高版本时,您可以在单行代码中map对象的值,如下所示:

Object.values(objResult).map(i => console.log(i));

在这里,你首先使用Object.values(objResult)创建一个值的数组,然后使用map函数迭代每个元素。
如果你不想使用map函数,你可以使用循环(例如“for of”或“for in”)迭代数组。

0

根据您的要求,我们可以使用for循环来实现,但需要进行一些修改。

var objResult = {0:{name:"xyz"}, 1:{name:"pqr"}, 2:{name:"abc"}};
for(let key in objResult) {
    let value = objResult[key].name;
    console.log(value);
}

希望这能对你有所帮助。

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