[英]How to loop through an array of objects and get specific key values in React?
[英]How to loop through JSON array and get specific values
如何遍歷下面的數組並獲取“ car1”的值? 下面的代碼返回未定義
<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>
要將這些值聚合到數組中,例如:
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)
如果內部還有其他對象,並且還希望訪問它們的屬性,則可以創建嵌套循環,如下所示:
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]
對象屬性。
在您的循環中:
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);
}
}
您的car1
屬性不在您嘗試訪問的級別。 循環遍歷對象,並檢查下一級是否存在car1。 如果是這樣,請顯示警報。 還要注意,在for in
循環中應該有一個if
語句,以確保該屬性存在(或其他一些條件)
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); } } }
<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;
您應該將for循環更改為
for (x in myObj) alert(myObj[x].car1);
試試看
您在這里有點擔心。 您沒有遍歷數組,而是通過for...in
循環遍歷了Object的屬性。
您應該注意這一點。 您可能希望通過更改為更新的遍歷方法來使其“安全”(不會遍歷原型或不可枚舉的屬性)。 即安全地獲取對象的值,而不是鍵的值,然后使用一些較新的循環函數對其進行循環。
由於不需要鍵,我們將使用Object.values
獲取值的數組,然后使用Array.prototype.filter()
過濾掉Object.prototype.hasownproperty報告的沒有'car1'屬性的Object.prototype.hasownproperty()
,最后對其進行映射,以使用Array.prototype.map()
對其進行轉換。 作為保持警報的一種方式,我們將使用Array.prototype.forEach()
對每個警報進行警報。
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.