我有一個帶有嵌套物件的javascript物件:
{
"common": {
"setting1": "Value 1",
"setting2": 200,
"setting3": true,
"setting6": {
"key": "value",
"doge": {
"wow": ""
}
}
},
"group1": {
"baz": "bas",
"foo": "bar",
"nest": {
"key": "value"
}
},
"group2": {
"abc": 12345,
"deep": {
"id": 45
}
}
}
我必須將所有鍵作為嵌套陣列。
我試過這個功能:
function getKeys(obj) {
return Object.keys(obj).map((key, keys) => {
if (typeof obj[key] !== 'object') return key;
return [key, getKeys(obj[key])];
});
}
得到了這個://
[
[ 'common', [ 'setting1', 'setting2', 'setting3', [Array] ] ],
[ 'group1', [ 'baz', 'foo', [Array] ] ],
[ 'group2', [ 'abc', [Array] ] ]
]
而不是這樣的預期結果:
[
[ 'common', [ 'setting1', 'setting2', 'setting3','setting6', ['key','doge', ['wow']],
[ 'group1', [ 'baz', 'foo', ['nest', ['key'] ],
[ 'group2', [ 'abc', 'deep', ['id'] ] ]
]
等等。
請幫幫我
uj5u.com熱心網友回復:
您可以使用reduce并Object.entries創建遞回函式。
const data = {"common":{"setting1":"Value 1","setting2":200,"setting3":true,"setting6":{"key":"value","doge":{"wow":""}}},"group1":{"baz":"bas","foo":"bar","nest":{"key":"value"}},"group2":{"abc":12345,"deep":{"id":45}}}
function getKeys(data) {
return Object.entries(data).reduce((r, [key, value]) => {
r.push(key)
if (typeof value === 'object') r.push(getKeys(value))
return r
}, [])
}
console.log(getKeys(data))
uj5u.com熱心網友回復:
試試這個
function getKeys (obj) {
const keys = Object.keys(obj);
for (let i = 0; i < keys.length; i ){
const key = keys[i];
if (typeof obj[key] === 'object') {
keys.splice(i 1, 0, getKeys(obj[key]));
i ;
}
}
return keys
}
結果:
'["common",["setting1","setting2","setting3","setting6",["key","doge",["wow"]]],"group1",["baz","foo","nest",["key"]],"group2",["abc","deep",["id"]]]'
可能不是最優化的解決方案,但應該可以。
uj5u.com熱心網友回復:
謝謝,兩個選項都有效!if (typeof obj[key] === 'object')由于 TypeError: Cannot convert undefined or null to object const keys = Object.keys(obj); ,我只需要添加 null check in (其中一個值為 null 并且“Typeof null 回傳 'object' ,這是 JavaScript 中可能永遠無法修復的歷史錯誤。”)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411924.html
標籤:
上一篇:如果使用ES6為null或undefined,如何檢查物件的每個鍵和值?
下一篇:重新定義Python物件方法?
