获取一个对象在另一个对象中的 属性 的值(描述)
Getting Value (Description) of an object's property in another object
我需要一个对象数组,这些对象可以通过 CategoryId 相互关联。像下面的代码:
const Category = [
{ ID: 100 , Description: Cate1},
{ID: 101 , Description: Cate2}
]
const Items = [
{ID: 2001, CategoryID: 100, Desc: Item1 },
{ID: 2002, CategoryID: 100, Desc: Item2 },
{ID: 2003, CategoryID: 101, Desc: Item3 },
]
我将使用 lis 中的 map 方法分发项目,这些项目根据从两个数组中都存在的类别 id 中提取的类别描述汇总在自己的 ul 中。例如:
Cate1 > ul
item1 > li
item2 > li
Cate2 > ul
item3 > li
。
.
.
如何使用 Javascript 或 ES6/7/8 解决此问题?
您可以查看每个类别以及每个 filter()
匹配项。这很简单,但如果你有很多数据,会有点慢,因为你每次都要循环遍历项目列表:
const Category = [{ ID: 100 , Description: 'Cate1'}, {ID: 101 , Description: 'Cate2'}]
const Items = [ {ID: 2001, 'CategoryID': 100, Desc: 'Item1' }, {ID: 2002, 'CategoryID': 100, Desc: 'Item2' }, {ID: 2003, 'CategoryID': 101, Desc: 'Item3' }, ]
Category.forEach(cat => {
console.log('ul> '+cat.Description)
Items.filter(item => item.CategoryID === cat.ID)
.forEach(item => console.log(' li> ' + item.Desc))
})
或者,您可以根据 ID 为您的项目构建一次查找 table,然后使用它在恒定时间内查找项目。对于更大的数据,这会更快,但需要更多的前期工作:
const Category = [{ ID: 100 , Description: 'Cate1'}, {ID: 101 , Description: 'Cate2'}]
const Items = [ {ID: 2001, 'CategoryID': 100, Desc: 'Item1' }, {ID: 2002, 'CategoryID': 100, Desc: 'Item2' }, {ID: 2003, 'CategoryID': 101, Desc: 'Item3' }, ]
let lookup = Items.reduce((a, c) => {
(a[c.CategoryID] || (a[c.CategoryID] = [])).push(c)
return a
}, {})
Category.forEach(cat => {
console.log('ul> '+cat.Description)
lookup[cat.ID]
.forEach(item => console.log(' li> ' + item.Desc))
})
我需要一个对象数组,这些对象可以通过 CategoryId 相互关联。像下面的代码:
const Category = [
{ ID: 100 , Description: Cate1},
{ID: 101 , Description: Cate2}
]
const Items = [
{ID: 2001, CategoryID: 100, Desc: Item1 },
{ID: 2002, CategoryID: 100, Desc: Item2 },
{ID: 2003, CategoryID: 101, Desc: Item3 },
]
我将使用 lis 中的 map 方法分发项目,这些项目根据从两个数组中都存在的类别 id 中提取的类别描述汇总在自己的 ul 中。例如:
Cate1 > ul
item1 > li
item2 > li
Cate2 > ul
item3 > li
。 . . 如何使用 Javascript 或 ES6/7/8 解决此问题?
您可以查看每个类别以及每个 filter()
匹配项。这很简单,但如果你有很多数据,会有点慢,因为你每次都要循环遍历项目列表:
const Category = [{ ID: 100 , Description: 'Cate1'}, {ID: 101 , Description: 'Cate2'}]
const Items = [ {ID: 2001, 'CategoryID': 100, Desc: 'Item1' }, {ID: 2002, 'CategoryID': 100, Desc: 'Item2' }, {ID: 2003, 'CategoryID': 101, Desc: 'Item3' }, ]
Category.forEach(cat => {
console.log('ul> '+cat.Description)
Items.filter(item => item.CategoryID === cat.ID)
.forEach(item => console.log(' li> ' + item.Desc))
})
或者,您可以根据 ID 为您的项目构建一次查找 table,然后使用它在恒定时间内查找项目。对于更大的数据,这会更快,但需要更多的前期工作:
const Category = [{ ID: 100 , Description: 'Cate1'}, {ID: 101 , Description: 'Cate2'}]
const Items = [ {ID: 2001, 'CategoryID': 100, Desc: 'Item1' }, {ID: 2002, 'CategoryID': 100, Desc: 'Item2' }, {ID: 2003, 'CategoryID': 101, Desc: 'Item3' }, ]
let lookup = Items.reduce((a, c) => {
(a[c.CategoryID] || (a[c.CategoryID] = [])).push(c)
return a
}, {})
Category.forEach(cat => {
console.log('ul> '+cat.Description)
lookup[cat.ID]
.forEach(item => console.log(' li> ' + item.Desc))
})