루프가 잘못된 용어 일지 모르지만, 제가 시도하고있는 것을 설명합니다. 플랫 데이터에 구조체를 제공하고 싶지만 배열의 위치를 추적해야합니다.Ramda가 배열을 반복합니다.
은 기본적으로 내 규칙 (배열 당)은 다음과 같습니다
레벨 1은 그것을 항목의
name
및typechild
배열을 제공 exists-합니다. 레벨 1이 나타날 때마다 (동일한 배열에서도) 새 항목을 만들어야합니다. NO 레벨 1 그것을 항목의name
및typechild
배열을주지 않으면 exists-typechild
내부 레벨> 1으로 모든 항목을 넣어.
내 코드는 다음 그것이 레벨을보고 배열 매번 생성한다는 것을 제외하고, 거의가 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
}]
}
]
을 참고 : 동물과 음식 모두 레벨 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']))
);
입니까? 'NoName '은 어디에서 왔습니까? – garajo