반응형
Underscore.js : 객체에있는 키를 사용하여 객체 목록에서 맵을 만듭니다.
우수한 Underscore.js 라이브러리를 사용하고 있습니다. JavaScript 또는 jQuery를 사용하여 잘 할 수있는 특정 작업이 있지만 Underscore에서 사용할 수있는 추상화가 있는지 궁금합니다.
본질적으로 나는 그런 물건을 가지고 있습니다.
var some_object_array = [{id: "a", val: 55}, {id: "b", val: 1}, {id: "c", val: 45}];
나는 이것을 다음으로 변환하고 싶다.
var some_map = {"a": {id: "a", val: 55}, "b": {id: "b", val: 1}, "c": {id: "c", val: 45}};
사용할 수 있다는 것을 알고 있습니다 _.groupBy(some_object_array, "id")
. 그러나 이것은 다음과 같은지도를 반환합니다.
var some_grouped_map = {"a": [{id: "a", val: 55}], "b": [{id: "b", val: 1}], "c": [{id: "c", val: 45}]};
이것은 광고 된 작업을 수행합니다. 그러나 나는 some_map
객체를 직접 반복하지 않고 얻고 싶었 습니다.
도움을 주시면 감사하겠습니다.
그만한 가치를 위해 underscore.js 이후로 이제 사용할 수 있습니다. _.object()
var some_map = _.object(_.map(some_object_array, function(item) {
return [item.id, item]
}));
귀하의 경우에는 다음 indexBy
기능을 사용해야합니다 .
var some_object_array = [{id: "a", val: 55}, {id: "b", val: 1}, {id: "c", val: 45}];
var some_grouped_map = _.indexBy(some_object_array, 'id');
이 방법도 있습니다
_.reduce(data, function (o, item) { o[item.key] = item.value; return o }, {})
내부 함수에 두 개의 명령문이있는 하나의 명령문입니다.
나는 당신의 필요에 대해 groupBy보다 가까운 것이 있다고 생각하지 않습니다. 있었다고하더라도 단순한 것보다 낫지 않을 것입니다.
var some_map = {};
_.each(some_object_array, function(val) {
some_map[val.id] = val;
});
이 경우 배열을 반복 할 필요가 없습니다. 아니 map
, 아니 reduce
, 아니 transform
. 당신이 필요로하는 것은 늙음pluck
_.object(_.pluck(some_object_array, 'id'), some_object_array);
ES6의 경우
var some_map = _.chain(some_object_array)
.map(item => [item.id, item])
.object()
.value()
lodash를 사용하여 이렇게 해결했습니다.
const ar = [
{ key: '1', val: 'a' },
{ key: '2', val: 'b' },
{ key: '3', val: 'c' }
]
const obj = _.keyBy({ ...ar }, 'key')
console.log(obj)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.5/lodash.min.js"></script>
반응형
'IT TIP' 카테고리의 다른 글
typeof는 연산자이자 함수입니다. (0) | 2020.12.09 |
---|---|
오류 3002 : 조각 매핑 문제 | (0) | 2020.12.09 |
Android Studio의 미리보기에서 "리소스를 확인할 수 없습니다" (0) | 2020.12.09 |
쉘 스크립트 내에서 passwd 명령 사용 (0) | 2020.12.09 |
Rails, 모델에서 뷰 / 부분을 렌더링하는 방법 (0) | 2020.12.09 |