我正在嘗試展平包含混合內容(React 應用程式中的 JavaScript)的資料物件。我只需要物件中每個父母和孩子的鑰匙;我不一定需要這些值(盡管存在它們不會破壞交易)。
我已經搜索了一個多星期來找到適合我用例的解決方案,但是我嘗試過的所有東西都達不到要求,包括 vanilla JavaScript、Lodash、Underscore 和 flat(NPM 包)。
在每種情況下,我要么得到一個比我預期的更短的串列(因為我只得到了父母),要么我得到了一個帶有點符號分隔的物件的完全扁平化的物件,這對我來說毫無用處。
我知道有很多與該主題相關的問題和答案,但我所看到的沒有與我的用例相匹配,而且我似乎無法解決這個問題。
這是我的資料結構的示例:
const sampleData = {
coyotes: '',
armadillos: false,
wombats: [''],
geckos: 0,
dogs: {
beagle: '',
bulldog: ''
},
wolves: [
{
type: '',
color: '',
range: '',
status: {
endangered: true,
protected: false
}
}
],
cats: {}
}
這是我(理想情況下)想要回來的:
result = {coyotes, armadillos, wombats, geckos, dogs, beagle, bulldog, wolves, type, color, range, status, endangered, protected, cats}
這是我想呼叫扁平化方法的方式:
flattenData(sampleData)
這是我到目前為止所擁有的:
const flattenData = (obj) =>
Object.assign(
{},
...(function _flatten (o) {
return [].concat(...Object.keys(o)
.map(k =>
typeof o[k] === 'object' ? _flatten(o[k]) : (Number([k]) !== 0 && { [k]: o[k] })
)
)
}(obj))
)
...產生:
{
"coyotes": "",
"armadillos": false,
"geckos": 0,
"beagle": "",
"bulldog": "",
"type": "",
"color": "",
"range": "",
"endangered": true,
"protected": false
}
正如您會注意到的,一些父母不見了(袋熊、狗、狼和地位),并且缺少了一個空物體(貓)。
uj5u.com熱心網友回復:
這不是我寫過的最漂亮的代碼。不幸的是它確實得到了一切
const flattenData = (data) => {
let results = [];
const recursive = (data) => {
Object.keys(data)
.map(function (key) {
results.push(key);
recursive(data[key]);
return data[key]; // This doesn't actually do anything...
});
}
recursive(data);
return results;
};
const value = flattenData(sampleData);
uj5u.com熱心網友回復:
這是一個簡單的遞回:
const deepKeys = (o) =>
Array .isArray (o)
? o .flatMap (deepKeys)
: Object (o) === o
? Object .entries (o) .flatMap (([k, v]) => [k, ... deepKeys (v)])
: []
const sampleData = {coyotes: '', armadillos: false, wombats: [''], geckos: 0, dogs: {beagle: '', bulldog: ''}, wolves: [{type: '', color: '', range: '', status: {endangered: true, protected: false}}], cats: {}}
console .log (deepKeys (sampleData))
.as-console-wrapper {max-height: 100% !important; top: 0}
我們需要對陣列、物件和其他型別進行一些不同的處理,但每一種都相當簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/411300.html
標籤:
