Skip to main content
 首页 » 编程设计

javascript之如何基于键对数组进行分组,以及如何使用分组数组作为值来创建动态对象

2025年01月19日11artech

我有多个items,其中一些具有相同的title。我想创建一个多维数组,将title作为第一个键,并将唯一数字作为第二个键。因此可以通过itemstitle进行分类。

例:

itemArray['title1'][0] = item1 
 
itemArray['title1'][1] = item2 
 
itemArray['title2'][0] = item3 

我的示例正在使用此代码,但我认为这很复杂,我希望JavaScript还有另一种方法。

let itemArray = {} 
items.forEach(item => { 
    let title = item['title'] 
 
    if (itemArray[title] == null) { 
      itemArray[title] = {} 
    } 
    let index = Object.keys(itemArray[title]).length 
    itemArray[title][index] = item 
  }, 
)


输入:
[ RowDataPacket { 
    uid: 1, 
    title: 'booktitle', 
    description: 'description' }, 
  RowDataPacket { 
    uid: 2, 
    title: 'booktitle', 
    description: 'description 2' }, 
  RowDataPacket { 
    uid: 1, 
    title: 'booktitle 2', 
    description: 'description' } ] 

预期的输出(由于它是sql查询的结果,因此该项目是RowDataPacket):
{ 'booktitle': 
    { '0': 
      RowDataPacket { 
        uid: 1, 
        title: 'booktitle', 
        description: 'description'  } }, 
    { '1': 
      RowDataPacket { 
        uid: 2, 
        title: 'booktitle', 
        description: 'description 2'  } }, 
  'booktitle 2': 
    { '0': 
      RowDataPacket { 
        uid: 1, 
        title: 'booktitle 2', 
        description: 'description'  } } 
} 

使用PHP很容易,它的工作方式如下:
$itemArray = array(); 
foreach ($items as $key => $item) { 
    $itemArray[$item['title']][] = $item; 
} 

提前致谢!

请您参考如下方法:

您可以通过采用默认数组并推送项目来减少数组。

var items = [{ title: 'title1' }, { title: 'title1' }, { title: 'title2' }], 
    result = items.reduce((r, item) => { 
        (r[item.title] = r[item.title] || []).push(item); 
        return r; 
    }, {}); 
     
console.log(result);