首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Algolia层次结构:组织用于索引的数组

Algolia层次结构:组织用于索引的数组
EN

Stack Overflow用户
提问于 2022-02-27 18:37:58
回答 1查看 925关注 0票数 0

我有这个数组

代码语言:javascript
复制
["Fruits > Citrus > Orange", "Accessories > Bracelets"]

我需要把它变成:

代码语言:javascript
复制
{
  "lvl0": ["Fruits", "Accessories"],
  "lvl1": ["Fruits > Citrus", "Accessories > Bracelets"],
  "lvl2": ["Fruits > Citrus > Orange"]
}

你怎么用减速机处理这件事?我已经接近使用洛达什zip了,但我有点疯了

有人有这么酷的功能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-27 19:09:14

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

  1. ,首先,我单独拆分,并对元素的降序no进行排序。这样做是因为第一个元素具有最高的no级别,稍后我将使用它来决定级别的no。

  1. ,然后我在排序数组上运行reduce。在第一个If语句中,我正在初始化累加器对象中的级别。只对第一个元素访问if语句。

之后,我将子数组推送到基于级别的单个数组中

在这个特定的例子中,排序甚至是不必要的,因为它已经被排序了。

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71287514

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档