循環可能是錯誤的術語,但它描述了我正在嘗試的東西。 我想給平面數據結構,但我也需要跟蹤它來自的數組。拉姆達循環陣列
基本上我的規則(每個陣列):
如果1級exists-給它的項目的
name
和typechild
陣列。每次出現1級(即使在相同的數組中),它應該創建一個新的條目。typechild
內,把任何產品與水平> 1如果NO水平1 exists-給它的項目的
name
和typechild
陣列。
下面我的代碼是幾乎存在,所不同的是它應該創建它看到一個級別的陣列,每次1.我的例子纔有意義:
輸入數據
[
{
"title": "Test 1",
"type": [{
"name": "Animal",
"level": 1
},
{
"name": "Food",
"level": 1
},
{
"name": "Chicken",
"level": 3
}
]
},
{
"title": "Test 2",
"type": [{
"name": "Foo",
"level": 2
}]
}
]
注:動物和食物都是LEVEL 1項。所以應該建立兩個數組是這樣的...
所需的輸出
[
{
name: "Animal",
typechild: [
{
level: 2,
name: "Chicken"
}
]
},
{
name: "Food",
typechild: [
{
level: 2,
name: "Chicken"
}
]
},
{
name: "NoName",
typechild: [
{
level: 2,
name: "Foo"
}
]
}
]
Ramda嘗試(試一下:https://dpaste.de/JQHw):
const levelEq = (n) => pipe(prop('level'), equals(n));
const topLevel = pipe(prop('type'), find(levelEq(1)));
const topLevelName = pipe(topLevel, propOr('NoName', 'name'));
const extract2ndLevel = pipe(pluck('type'), flatten, filter(levelEq(2)));
const convert = pipe(
groupBy(topLevelName),
map(extract2ndLevel),
map(uniq),
toPairs,
map(zipObj(['name', 'typechild']))
);
爲什麼'Chicken' 2級? 'NoName'從哪裏來? – garajo