嵌套对象
在一个扁平数组中递归地嵌套相互链接的对象。
- 使用递归。
- 使用
Array.prototype.filter()
过滤id
与link
匹配的项。 - 使用
Array.prototype.map()
将每个项映射到一个新对象,该对象具有一个children
属性,该属性根据哪些项是当前项的子项递归地嵌套项。 - 省略第二个参数
id
,默认为null
,表示该对象没有链接到另一个对象(即顶级对象)。 - 省略第三个参数
link
,默认使用'parent_id'
作为链接对象的属性,该属性通过其id
将对象链接到另一个对象。
const nest = (items, id = null, link = 'parent_id') =>
items
.filter(item => item[link] === id)
.map(item => ({ ...item, children: nest(items, item.id, link) }));
const comments = [
{ id: 1, parent_id: null },
{ id: 2, parent_id: 1 },
{ id: 3, parent_id: 1 },
{ id: 4, parent_id: 2 },
{ id: 5, parent_id: 4 }
];
const nestedComments = nest(comments);
// [{ id: 1, parent_id: null, children: [...] }]