获取一个对象在另一个对象中的 属性 的值(描述)

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))
})