我想遍历JavaScript对象的属性
var obj =
{
a: 'value1',
b: 'value2',
c: 'value3',
d: 'value4'
};
for (var prop in obj) {
prop = 'xxx';
}
但上面的代码不起作用。你能帮我怎么做吗?
答案 0 :(得分:86)
您应该检查该属性是否属于该对象而不是原型。
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
obj[prop] = 'xxx';
}
}
答案 1 :(得分:72)
prop
将引用属性名称,而不是其值。
for (var prop in obj) {
obj[prop] = 'xxx';
}
此外,您可能想要使用hasOwnProperty
检查属性是否属于该对象。可能会有人向原型添加属性,而这些属性也会由for ... in
迭代。
答案 2 :(得分:20)
以下是使用ES5完成的方法 - Object.keys():
Object.keys(obj).forEach(function(key, idx) {
...
});
http://jsfiddle.net/magiccrafter/bvwenh5d/
Mozilla的文档:link
答案 3 :(得分:2)
for(let i = 0; i < Object.entries(dog).length; i++){
this.temp.push(Object.entries(dog)[i]);
}
答案 4 :(得分:2)
const obj = {
"abc":1, "def":2
}
for (let key in obj){
console.log(key+":"+obj[key])
}
答案 5 :(得分:1)
如果您处于ES6友好环境中,您还可以尝试使用更接近原始尝试的for ... of循环。
for..of
特定于具有Symbol.iterator属性的集合(例如,不是标准JS对象)。
但是我在这里留下这个答案,以防其他人发现它在某些方面有用,明确指出for..of
在这里不是一个很好的解决方案。
let obj = {};
for (let prop of obj) { // This will throw an error
prop = 'xxx';
}
答案 6 :(得分:1)
使用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}`);
}
答案 7 :(得分:0)
var temp= {"6s","vikash","500"};
console.log([...temp]); //["6s","vikash","500"]