遍历 Javascript 对象属性
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/4366104/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Traverse through Javascript object properties
提问by Rocky Singh
I want to traverse through JavaScript object's property
我想遍历 JavaScript 对象的属性
var obj =
{
a: 'value1',
b: 'value2',
c: 'value3',
d: 'value4'
};
for (var prop in obj) {
prop = 'xxx';
}
But the above code is not working. Can you help me how to do so ?
但是上面的代码不起作用。你能帮我怎么做吗?
回答by Christian Tellnes
You should check that the property belongs to the object and not a prototype.
您应该检查该属性是否属于对象而不是原型。
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
obj[prop] = 'xxx';
}
}
回答by Alin Purcaru
prop
will reference the property name, not its value.
prop
将引用属性名称,而不是它的值。
for (var prop in obj) {
obj[prop] = 'xxx';
}
Also you may want to check if the property belongs to the object using hasOwnProperty
. It may happen that someone adds properties to the prototype and those are also iterated by for ... in
.
此外,您可能希望使用hasOwnProperty
. 有人可能会向原型添加属性,并且这些属性也被for ... in
.
回答by magiccrafter
Here is how it is done using the ES5 - Object.keys() :
下面是如何使用 ES5 - Object.keys() 完成它:
Object.keys(obj).forEach(function(key, idx) {
...
});
http://jsfiddle.net/magiccrafter/bvwenh5d/
http://jsfiddle.net/magiccrafter/bvwenh5d/
Mozilla's docs: link
Mozilla 的文档:链接
回答by Farid Garciayala
for(let i = 0; i < Object.entries(dog).length; i++){
this.temp.push(Object.entries(dog)[i]);
}
回答by Snedden27
Using ecmascript2017: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
使用 ecmascript2017:https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
const object1 = {
a: 'somestring',
b: 42
};
for (let [key, value] of Object.entries(object1)) {
console.log(`${key}: ${value}`);
}
回答by veer varun singh
const obj = {
"abc":1, "def":2
}
for (let key in obj){
console.log(key+":"+obj[key])
}
回答by relic
If you're in an ES6 friendly environment, you can also try using the for...of loop which is closer to your original attempt.
如果您处于 ES6 友好环境中,您还可以尝试使用更接近您最初尝试的 for...of 循环。
EDIT: As Caleb pointed out, for..of
is specific to collections with the Symbol.iterator property (e.g. not standard JS objects).
编辑:正如 Caleb 所指出的,for..of
特定于具有 Symbol.iterator 属性的集合(例如,不是标准的 JS 对象)。
But I'm leaving this answer here in case anybody else finds it useful at some point to have it pointed out explicitly that a for..of
is not a great solution here.
但是我将这个答案留在这里,以防其他人发现在某些时候明确指出 afor..of
在这里不是一个好的解决方案很有用。
let obj = {};
for (let prop of obj) { // This will throw an error
prop = 'xxx';
}
Reference: MDN - for...of