그만큼 map
underscore.js 함수는 javascript 객체와 함께 호출 된 경우 객체 값에서 매핑 된 값의 배열을 반환합니다.
_.map({one: 1, two: 2, three: 3}, function(num, key){ return num * 3; });
=> [3, 6, 9]
키를 보존하는 방법이 있습니까? 즉, 나는 반환하는 함수를 원한다
{one: 3, two: 6, three: 9}
답변
와 밑줄
밑줄은 _.mapObject
값을 매핑하고 키를 유지 하는 기능 을 제공 합니다.
_.mapObject({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
// => { one: 3, two: 6, three: 9 }
와 Lodash
Lodash는 _.mapValues
값을 매핑하고 키를 유지 하는 기능 을 제공 합니다.
_.mapValues({ one: 1, two: 2, three: 3 }, function (v) { return v * 3; });
// => { one: 3, two: 6, three: 9 }
답변
밑줄과 비슷한 유틸리티 라이브러리 인 lodash에서 필요한 기능을 찾을 수있었습니다.
http://lodash.com/docs#mapValues
_.mapValues(object, [callback=identity], [thisArg])
콜백을 통해 객체의 열거 가능한 각 속성을 실행하여 생성 된 객체 및 값과 동일한 키로 객체를 만듭니다. 콜백은 thisArg에 바인딩되며 세 개의 인수로 호출됩니다. (값, 키, 객체).
답변
var mapped = _.reduce({ one: 1, two: 2, three: 3 }, function(obj, val, key) {
obj[key] = val*3;
return obj;
}, {});
console.log(mapped);
<script src="http://underscorejs.org/underscore-min.js"></script>
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
답변
나는 이것이 오래되었다는 것을 알고 있지만 이제 Underscore에는 객체에 대한 새로운 맵이 있습니다.
_.mapObject(object, iteratee, [context])
물론 배열과 객체 모두에 대해 유연한지도를 만들 수 있습니다
_.fmap = function(arrayOrObject, fn, context){
if(this.isArray(arrayOrObject))
return _.map(arrayOrObject, fn, context);
else
return _.mapObject(arrayOrObject, fn, context);
}
답변
일반 JS ( ES6 / ES2015 ) 에서이 버전은 어떻습니까?
let newObj = Object.assign(...Object.keys(obj).map(k => ({[k]: obj[k] * 3})));
객체를 재귀 적으로 매핑하려면 (중첩 된 obj 매핑) 다음과 같이 수행 할 수 있습니다.
const mapObjRecursive = (obj) => {
Object.keys(obj).forEach(key => {
if (typeof obj[key] === 'object') obj[key] = mapObjRecursive(obj[key]);
else obj[key] = obj[key] * 3;
});
return obj;
};
이후 ES7 / ES2016 당신이 사용할 수있는 Object.entries
대신에 Object.keys
이 같은 :
let newObj = Object.assign(...Object.entries(obj).map([k, v] => ({[k]: v * 3})));
답변
나는 그것이 오랜 시간이라는 것을 알고 있지만 폴드 (일명 js로 줄임)를 통한 가장 확실한 해결책이 누락되었습니다. 완전성을 위해 여기에 남겨 두겠습니다.
function mapO(f, o) {
return Object.keys(o).reduce((acc, key) => {
acc[key] = f(o[key])
return acc
}, {})
}
답변
_.map 은 객체가 아닌 배열을 반환합니다.
객체를 원한다면 each
; 과 같은 다른 기능을 사용하는 것이 좋습니다 . 정말로 맵을 사용하려면 다음과 같이 할 수 있습니다.
Object.keys(object).map(function(value, index) {
object[value] *= 3;
})
그러나 map
결과적으로 배열을 가지고 무언가를 만들 것으로 기대할 때 혼란 스럽 습니다.
