IT TIP

Underscore.js : 객체에있는 키를 사용하여 객체 목록에서 맵을 만듭니다.

itqueen 2020. 12. 9. 22:03
반응형

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>

참고 URL : https://stackoverflow.com/questions/10416424/underscore-js-create-a-map-out-of-list-of-objects-using-a-key-found-in-the-obje

반응형