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
但我有点失去理智了
有人有很棒的功能可以做到这一点吗?
可能有更好的方法,但让我解释一下我的过程。
- 首先我单独拆分并按降序排列元素数。这样做是为了让第一个元素具有最高的级别数,稍后我将使用它来决定级别数。
- 然后我 运行
reduce
排序数组。在第一个 If 语句中,我正在初始化累加器对象中的级别。该 if 语句将仅针对第一个元素进行访问。
之后,我将根据 level 将子数组推送到各个数组
好吧,在这个具体示例中,排序甚至没有必要,因为它已经排序了。
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)
我有这个数组
["Fruits > Citrus > Orange", "Accessories > Bracelets"]
我需要把它变成:
{
"lvl0": ["Fruits", "Accessories"],
"lvl1": ["Fruits > Citrus", "Accessories > Bracelets"],
"lvl2": ["Fruits > Citrus > Orange"]
}
你会如何用减速器处理这个问题?我已经接近使用 Lodash zip
但我有点失去理智了
有人有很棒的功能可以做到这一点吗?
可能有更好的方法,但让我解释一下我的过程。
- 首先我单独拆分并按降序排列元素数。这样做是为了让第一个元素具有最高的级别数,稍后我将使用它来决定级别数。
- 然后我 运行
reduce
排序数组。在第一个 If 语句中,我正在初始化累加器对象中的级别。该 if 语句将仅针对第一个元素进行访问。
之后,我将根据 level 将子数组推送到各个数组
好吧,在这个具体示例中,排序甚至没有必要,因为它已经排序了。
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)