我需要得到所有" id"和"名称"我有一个大集合。一个数组ob对象,它包含带有对象(等)的数组。
我无法在没有手动执行多种级别的操作的情况下使用它,这很难看。
我正在使用Lodash,所以使用它的解决方案很可爱。
这是集合的样子:
[
{
"id": 1,
"name": "Living",
"numberStories": 0,
"subcategories": {
"data": [
{
"id": 2,
"name": "Fashion",
"numberStories": 0,
"subcategories": {
"data": [
{
"id": 3,
"name": "Accessories",
"numberStories": 0,
"subcategories": {
"data": [
]
}
},
{
"id": 4,
"name": "Kid's Fashion",
"numberStories": 0,
"subcategories": {
"data": [
]
}
}, (... etc)
因此,它需要查看每个对象数组中的子类别并收集ID和名称,以便最终得到所有级别的所有ID名称。
感谢。
答案 0 :(得分:1)
如上所述,这可能更容易使用原生javascript,因为它是递归的。这与前一个答案的想法相同,但使用ES6的一些很酷的功能(解构,休息参数,箭头函数,默认参数),它将保存对父ID的引用,以便您可以在需要时重建类别树
const categories=[{id:1,name:"Living",numberStories:0,subcategories:{data:[{id:2,name:"Fashion",numberStories:0,subcategories:{data:[{id:3,name:"Accessories",numberStories:0,subcategories:{data:[]}},{id:4,name:"Kid's Fashion",numberStories:0,subcategories:{data:[]}}]}}]}}];
const flattenCategories = (categories, parent = null, ret = []) =>
categories.reduce((acc, { id, name, subcategories: { data } }) =>
acc.concat(
{ id, name, parent },
...flattenCategories(data, id)
)
, ret)
console.log(
flattenCategories(categories)
)

.as-console-wrapper { top: 0; max-height: 100% !important }

答案 1 :(得分:0)
没有必要为此目的使用lodash。使用.reduce()
的简单递归函数为您完成工作
function flattenId(inArray){
return inArray.reduce(function(output, elem){
output.push(elem.id);
return output.concat(flattenId(elem.subcategories.data));
}, []);
}
答案 2 :(得分:0)
这是一个使用 object-scan 的解决方案。根据您的用例,使用库可能有点矫枉过正,但如果需要,它可以为您提供更大的灵活性
// const objectScan = require('object-scan');
const categories = [{ id: 1, name: 'Living', numberStories: 0, subcategories: { data: [{ id: 2, name: 'Fashion', numberStories: 0, subcategories: { data: [{ id: 3, name: 'Accessories', numberStories: 0, subcategories: { data: [] } }, { id: 4, name: "Kid's Fashion", numberStories: 0, subcategories: { data: [] } }] } }] } }];
const r = objectScan(['**[*].id'], {
filterFn: ({ context, value, parents }) => {
context.push({
id: value,
name: parents[0].name,
parent: parents.length > 2 ? parents[3].id : null
});
}
})(categories, []);
console.log(r);
// => [ { id: 4, name: "Kid's Fashion", parent: 2 }, { id: 3, name: 'Accessories', parent: 2 }, { id: 2, name: 'Fashion', parent: 1 }, { id: 1, name: 'Living', parent: null } ]
.as-console-wrapper {max-height: 100% !important; top: 0}
<script src="https://bundle.run/object-scan@13.8.0"></script>
免责声明:我是object-scan
的作者