Algolia Hierarchy:组织数组以进行索引

Algolia Hierarchy: Organize array for indexing

我有这个数组

["Fruits > Citrus > Orange", "Accessories > Bracelets"]

我需要把它变成:

{
  "lvl0": ["Fruits", "Accessories"],
  "lvl1": ["Fruits > Citrus", "Accessories > Bracelets"],
  "lvl2": ["Fruits > Citrus > Orange"]
}

你会如何用减速器处理这个问题?我已经接近使用 Lodash zip 但我有点失去理智了

有人有很棒的功能可以做到这一点吗?

可能有更好的方法,但让我解释一下我的过程。

  1. 首先我单独拆分并按降序排列元素数。这样做是为了让第一个元素具有最高的级别数,稍后我将使用它来决定级别数。
  2. 然后我 运行 reduce 排序数组。在第一个 If 语句中,我正在初始化累加器对象中的级别。该 if 语句将仅针对第一个元素进行访问。
    之后,我将根据 level
  3. 将子数组推送到各个数组

好吧,在这个具体示例中,排序甚至没有必要,因为它已经排序了。

let a = ["Fruits > Citrus > Orange", "Accessories > Bracelets"]
let res = a.map((el)=> el.split(" > ")).sort((a,b) => b.length-a.length).reduce((acc,curr)=>{
    let levels = curr.length;
  if(!Object.keys(acc).length){
    for(i=0; i<levels;i++){
        acc[`lvl${i}`]=[]
    }
  }
  for(i=0; i<levels;i++){
        acc[`lvl${i}`].push(curr.slice(0,i+1).join(" > "))
  }
  
  return acc;
},{})

console.log(res)