*지연성 평가의 실무 예제
- 아래와 같이 users는 Json 형태의 객체로 선언이 되어있다.
- users 데이터를 가공하는 과정에서 go 혹은 pipe 함수를 통해 결과를 가독성이 좋고 효율적으로 lazy하게 평가할 수 있다.
take
를 통해 4개의 객체만 가져오므로, 전체 users의 크기가 무한히 커져도 4회만 순회하므로 효율이 매우 좋다고 볼 수 있다.
var users = [
{
name: 'a', age: 21, family: [
{name: 'a1', age: 53}, {name: 'a2', age: 47},
{name: 'a3', age: 16}, {name: 'a4', age: 15}
]
},
{
name: 'b', age: 24, family: [
{name: 'b1', age: 58}, {name: 'b2', age: 51},
{name: 'b3', age: 19}, {name: 'b4', age: 22}
]
},
{
name: 'c', age: 31, family: [
{name: 'c1', age: 64}, {name: 'c2', age: 62}
]
},
{
name: 'd', age: 20, family: [
{name: 'd1', age: 42}, {name: 'd2', age: 42},
{name: 'd3', age: 11}, {name: 'd4', age: 7}
]
}
];
go(users,
L.flatMap(u => u.family),
L.filter(u => u.age > 20),
L.map(u => u.age),
take(4),
reduce(add),
console.log);