[英]JavaScript | Iterate through JSON Object and get all the values for a specific key
[英]Iterate through the child objects and get all the values with javascript
var formmd = {
"frmType": "Registration",
"frmStage": "step1-complete",
"formattr": {
"SystemUser": {
"LoginName": "A@test.com",
"Password": "password",
"PIN": "",
"IsTestUser": false
},
"ConsumerAddress": {
"AddressLine1": "201 MOUNT Road",
"AddressLine2": null,
"AddressTypeId": "1",
"City": "OLA TRAP",
"State": "NM",
"Zipcode": "60005"
},
"ConsumerPhone": {
"PhoneTypeId": 6,
"PhoneNumber": "9876543210",
"PrimaryPhoneIndicator": null,
"AllowVoicemail": false
},
"PhysicianSpecialty": {
"SpecialtyList": [
"1",
"2"
]
},
}
}
我正在嘗試獲取 formattr 下子對象的所有值,但我無法在子對象內部進行迭代。 以下是我試過的腳本。 我的結果應該是
"A@test.com"
"password"
"PIN": ""
False
201 MOUNT Road"
我試過的腳本是
function walk(formmd) {
var obj1 = formmd.formattr;
for(var key in obj1){
if (obj1.hasOwnProperty(key)) {
var val1 = obj1[key];
if(val1.hasOwnProperty(key)){
for(var key in val1){
var val2 =val1[key];
console.log("val2");
}
}
}
}
}
如何以自動方式訪問子對象的鍵?
像這樣嘗試
for (var key in formmd) {
var val1 = formmd[key];
if (key=="formattr") {
for (var key1 in val1) {
var val2 = val1[key1];
for(var key2 in val2)
console.log(val2[key2]);
}
}
}
您可能會發現以函數式風格編寫的代碼更容易理解。 這是一種解決方案,我將解釋:
Object.values(formmd.formattr)
.map(obj => Object.values(obj))
.reduce((acc, vals) => acc.concat(vals), [])
第一個表達式Object.values(formmd.formattr)
為您提供Object.values(formmd.formattr)
下所有值(不是鍵)的formmd.formattr
。 就像是:
[{"LoginName": "A@test.com", "Password": "password", …}, {"AddressLine1": "201 MOUNT Road", "AddressLine2": null, …}, …]
由於您需要這些子對象中的每一個中的值,因此下一行.map(obj => Object.values(obj))
將做到這一點。 它返回一個新數組,其中輸入數組中的每個對象都通過Object.values(…)
。 它返回如下內容:
[["A@test.com", "password", "", false], ["201 MOUNT Road", null, "1", …], …]
該數組包含您需要的所有數據,但在嵌套數組中,因此需要使用.reduce((acc, vals) => acc.concat(vals), [])
。 這個reduce
將連續concat
這些子數組以產生一個單一的數組,如:
["A@test.com", "password", "", false, "201 MOUNT Road", null, "1", …]
它包含formattr
對象的所有值。
這里有一些其他的方法來做到這一點:
Object.values(formmd.formattr)
.reduce((acc, x) => acc.concat(Object.values(x)), [])
或者
[].concat(...
Object.values(formmd.formattr)
.map(obj => Object.values(obj)))
你將不得不使用Object.entries()
Object.entries() 方法返回給定對象自己的可枚舉字符串鍵控屬性 [key, value] 對的數組,其順序與 for...in 循環提供的順序相同。 (唯一重要的區別是 for...in 循環也枚舉原型鏈中的屬性)。
例子 -
for (const [key, value] of Object.entries(objectName)) {
console.log(`${key}: ${value}`);
}
代碼片段 -
var formmd = { "frmType": "Registration", "frmStage": "step1-complete", "formattr": { "SystemUser": { "LoginName": "A@test.com", "Password": "password", "PIN": "", "IsTestUser": false }, "ConsumerAddress": { "AddressLine1": "201 MOUNT Road", "AddressLine2": null, "AddressTypeId": "1", "City": "OLA TRAP", "State": "NM", "Zipcode": "60005" }, "ConsumerPhone": { "PhoneTypeId": 6, "PhoneNumber": "9876543210", "PrimaryPhoneIndicator": null, "AllowVoicemail": false }, "PhysicianSpecialty": { "SpecialtyList": [ "1", "2" ] }, } } for (const [key, value] of Object.entries(formmd.formattr)) { console.log('Value',value); }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.