如何遍历下面的数组并获取“ car1”的值?下面的代码返回 undefined
<script>
var myObj = {
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Fiat"
},
"cars2": {
"car1":"Ford2",
"car2":"BMW2",
"car3":"Fiat2"
}
}
for (x in myObj) {
alert(x.car1);
}
</script>
答案 0 :(得分:0)
用于将这些值聚合到数组中,例如:
let aggregated = [];
var myObj = {
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Fiat"
},
"cars2": {
"car1":"Ford2",
"car2":"BMW2",
"car3":"Fiat2"
}
}
Object.keys(myObj).forEach(e => {
aggregated.push(myObj[e].car1)
})
console.log(aggregated)
答案 1 :(得分:0)
如果内部还有其他对象,并且还希望访问其属性,则可以创建嵌套循环,如下所示:
var myObj = {
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Fiat"
},
"cars2": {
"car1":"Ford2",
"car2":"BMW2",
"car3":"Fiat2"
}
}
// Iterate over the first level
for (x in myObj) {
// Iterate over the second level
for (y in myObj[x]) {
document.getElementById("demo").innerHTML += myObj[x][y] + "<br>";
}
}
<div id="demo"></div>
通过这种方式,您也可以遍历myObj[cars]
和myObj[cars2]
对象的属性。
答案 2 :(得分:0)
在您的循环中:
for (x in myObj) {
alert(x.car1);
}
x是对象键的字符串值。为了获得嵌套对象的car1属性,您可以将循环更改为:
for (x in myObj) {
alert(myObj[x].car1);
}
在使用for-in
循环的同时使用hasOwnProperty也是一种好习惯,它还可能会遍历对象原型链中的属性。
for (x in myObj) {
if (myObj.hasOwnProperty(x)) {
alert(myObj[x].car1);
}
}
答案 3 :(得分:0)
您的car1
属性不在您尝试访问的级别。循环遍历对象,并检查下一级是否存在car1。如果是这样,请显示警报。另外请注意,在if
循环中应该有一个for in
语句,以确保该属性存在(或其他一些条件)
var myObj = {
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Fiat"
},
"cars2": {
"car1":"Ford2",
"car2":"BMW2",
"car3":"Fiat2"
}
}
for (var x in myObj) {
if (myObj.hasOwnProperty(x)) {
var obj = myObj[x];
if (obj.hasOwnProperty('car1')) {
alert(obj.car1);
}
}
}
答案 4 :(得分:0)
<script>
var myObj = {
"cars": {
"car1": "Ford",
"car2": "BMW",
"car3": "Fiat"
},
"cars2": {
"car1": "Ford2",
"car2": "BMW2",
"car3": "Fiat2"
}
}
var res = Object.values(myObj)
.map(i => i.car1)
.filter(name => (name !== 'Ford2'));
document.getElementById("demo").innerHTML = res;
答案 5 :(得分:0)
您应该将for循环更改为
for (x in myObj) alert(myObj[x].car1);
尝试一下
答案 6 :(得分:0)
您在这里有点疑虑。您没有遍历数组,而是通过for...in
遍历对象的属性。
您应该注意这一点。您可能希望通过更改为更新的遍历方法来使其“安全”(不会遍历原型或不可枚举的属性)。即安全地获取对象的值而不是键的值,然后使用一些较新的循环函数对其进行循环。
由于我们不需要键,因此我们将使用Object.values
获取值的数组,然后Array.prototype.filter()
过滤掉{{ 3}},最后通过Object.prototype.hasownproperty()
对其进行映射以对其进行转换。作为保持警报的一种方式,我们随后将使用Array.prototype.map()
Object
.values(myObj) // since we don't care about the keys, only loop over the values
.filter(obj => // filter out any values without a 'car1' property
obj.hasOwnProperty('car1')
)
.map(obj => obj.car1) // de-nest the car1 property
.forEach(alert)
现在,我们有了对象中值的car1属性数组。好消息是,如果也给定对象数组而不是嵌套对象,这将起作用,但这仅是因为我们不在乎保存对象的键,而只是对象实际上具有'car1'属性>
function (a,b){ return console.log(a,b) }
可以改写为
(a,b) => console.log(a,b)
[1,2,3].forEach(item => alert(item))
可以重写,因为在JavaScript函数中,函数是一阶的,并且可以作为参数传递给其他函数
[1,2,3].forEach(alert)