我正在尝试展平包含混合内容(React 应用程序中的 JavaScript)的数据对象。我只需要对象中每个父级和子级的键;我不一定需要这些值(尽管存在它们不会破坏交易)。
我已经搜索了一个多星期来找到适合我的用例的解决方案,但我尝试过的所有方法都达不到要求,包括普通 JavaScript、Lodash、Underscore 和 flat(NPM 包)。
在每种情况下,我要么得到比我预期的更短的列表(因为我只得到 parent ),要么得到一个带有点符号分隔对象的完全展平的对象,这对我来说毫无用处。
我知道有很多与该主题相关的问题和答案,但我所看到的没有任何内容与我的用例相符,而且我似乎无法解决这个问题。
这是我的数据结构示例:
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
}
正如您所注意到的,一些 parent 缺失了(袋熊、狗、狼和地位),并且缺失了一个空物体(猫)。
最佳答案
这不是我写过的最漂亮的代码。不幸的是它确实得到了一切
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);
关于javascript - 递归地展平深度嵌套的对象和数组的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70713850/