lodash : 객체에 배열 매핑
이것을 수행하는 내장 lodash 함수가 있습니까?
var params = [
{ name: 'foo', input: 'bar' },
{ name: 'baz', input: 'zle' }
];
다음을 출력합니다.
var output = {
foo: 'bar',
baz: 'zle'
};
지금은 다음을 사용하고 있습니다 Array.prototype.reduce()
.
function toHash(array, keyName, valueName) {
return array.reduce(function(dictionary, next) {
dictionary[next[keyName]] = next[valueName];
return dictionary;
}, {});
}
toHash(params, 'name', 'input');
lodash 단축키가 있는지 궁금합니다.
lodash 4.17.2의 또 다른 방법
_.chain(params)
.keyBy('name')
.mapValues('input')
.value();
또는
_.mapValues(_.keyBy(params, 'name'), 'input')
또는 _.reduce
_.reduce(
params,
(acc, { name, input }) => ({ ...acc, [name]: input }),
{}
)
배열을 객체로 쉽게 변환하려면 _.keyBy를 사용해야합니다.
아래 사용 예 :
var params = [
{ name: 'foo', input: 'bar' },
{ name: 'baz', input: 'zle' }
];
console.log(_.keyBy(params, 'name'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
필요한 경우 _.keyBy를 사용하기 전에 배열을 조작하거나 _.keyBy를 사용한 후 개체를 조작하여 원하는 정확한 결과를 얻을 수 있습니다.
네 여기 있습니다 ._.reduce
var params = [
{ name: 'foo', input: 'bar' },
{ name: 'baz', input: 'zle' }
];
_.reduce(params , function(obj,param) {
obj[param.name] = param.input
return obj;
}, {});
배열 축소 방법 및 ES6 구조 해제 와 함께 하나의 라이너 자바 스크립트를 사용 하여 키 값 쌍의 배열을 객체로 변환 할 수 있습니다.
arr.reduce((map, { name, input }) => ({ ...map, [name]: input }), {});
이것은 Object.assign에 대한 작업처럼 보입니다.
const output = Object.assign({}, ...params.map(p => ({[p.name]: p.input})));
OP와 유사한 함수로 래핑하도록 편집하면 다음과 같습니다.
const toHash = (array, keyName, valueName) =>
Object.assign({}, ...array.map(o => ({[o[keyName]]: o[valueName]})));
(Ben Steward에게 감사합니다, 좋은 생각 ...)
다음과 같은 lodash 함수를 사용하지 않고도 해결할 수 있습니다.
let paramsVal = [
{ name: 'foo', input: 'bar' },
{ name: 'baz', input: 'zle' }
];
let output = {};
paramsVal.forEach(({name, input})=>{
output[name] = input;
})
console.log(output);
이것은 아마도 원하는 것보다 더 장황 할 수 있지만 약간 복잡한 작업을 요구하므로 실제 코드가 관련 될 수 있습니다 (공포).
내 추천 zipObject
은 매우 논리적입니다.
_.zipObject(_.map(params, 'name'), _.map(params, 'input'));
또 다른 옵션은 더 해키, 사용 fromPairs
:
_.fromPairs(_.map(params, function(val) { return [val['name'], val['input']));
익명 함수는 해킹을 보여줍니다. JS가 객체 반복에서 요소의 순서를 보장한다고 믿지 않으므로 callling은 수행하지 않습니다 .values()
.
lodash의 또 다른 방법
쌍을 만든 다음 개체를 구성하거나 ES6 Map
쉽게
_(params).map(v=>[v.name, v.input]).fromPairs().value()
또는
_.fromPairs(params.map(v=>[v.name, v.input]))
다음은 작동하는 예입니다.
var params = [
{ name: 'foo', input: 'bar' },
{ name: 'baz', input: 'zle' }
];
var obj = _(params).map(v=>[v.name, v.input]).fromPairs().value();
console.log(obj);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
참고 URL : https://stackoverflow.com/questions/35489849/lodash-mapping-array-to-object
'Nice programing' 카테고리의 다른 글
std :: fill을 사용하여 증가하는 숫자로 벡터 채우기 (0) | 2020.11.29 |
---|---|
C #에서 새 개체를 만들 때 {}가 ()처럼 작동합니까? (0) | 2020.11.29 |
srand를 초기화하는 권장 방법? (0) | 2020.11.29 |
HTTP 406 및 415 오류 코드 (0) | 2020.11.29 |
git에서 서로 다른 디렉토리 계층을 가진 두 가지 분기를 병합하는 방법은 무엇입니까? (0) | 2020.11.29 |