const input = {
a: [1, 2, 3],
b: {
c: {
d: {
e: 4,
},
},
},
f: 5,
g: {
h: [6, 7],
},
};
const outPut = {
a: 123,
bcde: 4,
f: 5,
gh: 67,
};
const getAllKeysOfObject = (obj, key) => {
let tempKey = key;
let nextKey = ''
if (obj instanceof Object && Object.values(obj).length > 0) {
nextKey = Object.values(obj)[0]
tempKey = nextKey;
getAllKeysOfObject(obj[nextKey], nextKey)
} else {
return {key: tempKey, value: obj[nextKey]}
}
}
const getObject = (input) => {
let tempObj = {}
Object.keys(input).forEach(key => {
let value = input[key] //[1,2]
console.log(value)
if (Array.isArray(value)) {
let tempStr = ''
for(let i =0;i<value.length;i ) {
tempStr = value[i]
}
tempObj[key] = tempStr;
} else if (input[key] instanceof Object && Object.values(input[key]).length > 0) {
let newObj = getAllKeysOfObject(input[key], key)
tempObj[newObj.key] = newobj.value
} else {
tempObj[key] = input[key]
}
})
return tempObj
}
console.log(getObject(input))
如何得到輸出 { a: 123, bcde: 4, f: 5, gh: 67, }; 在javascript中
上面的代碼無法正常作業,但嵌套物件失敗。得到錯誤 Uncaught TypeError: Cannot read properties of undefined (reading '')"
JSFiddle 鏈接https://jsfiddle.net/ankitg1602/5v2gp64r/49/
uj5u.com熱心網友回復:
您可以使用reduce方法創建遞回函式,如果當前值不是添加到累加器引數的物件,還可以跟蹤以前的鍵并將它們傳遞下來。
const input = {
a: [1, 2, 3],
b: {
c: {
d: {
e: 4,
},
},
},
f: 5,
g: {
h: [6, 7],
},
};
function getOutput(data, pk = '') {
return Object.entries(data).reduce((r, [k, v]) => {
const key = pk k
if (typeof v === 'object' && !Array.isArray(v)) {
Object.assign(r, getOutput(v, key))
} else {
r[key] = Array.isArray(v) ? Number(v.join('')) : v
}
return r;
}, {})
}
console.log(getOutput(input))
uj5u.com熱心網友回復:
您可以通過遞回獲得條目。
這種方法不需要交出最后的密鑰。
const
getEntries = object => Object
.entries(object)
.flatMap(([k, v]) => v && typeof v === 'object' && !Array.isArray(v)
? getEntries(v).map(([l, r]) => [k l, r])
: [[k, [].concat(v).join('')]]
),
input = { a: [1, 2, 3], b: { c: { d: { e: 4 } } }, f: 5, g: { h: [6, 7] } },
result = Object.fromEntries(getEntries(input));
console.log(result);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/405969.html
標籤:
