스택큐힙리스트

객체에 대한 매핑 함수 (배열 대신) 본문

카테고리 없음

객체에 대한 매핑 함수 (배열 대신)

스택큐힙리스트 2024. 1. 28. 19:09
반응형

나는 객체를 가지고 있습니다:


myObject = { 'a': 1, 'b': 2, 'c': 3 }

나는 다음과 같이 사용되는 Array.prototype.map과 유사한 네이티브 메소드를 찾고 있습니다:


newObject = myObject.map(function (value, label) {
return value * value;
});
// newObject는 이제 { 'a': 1, 'b': 4, 'c': 9 }입니다.

자바스크립트에는 객체를 위한 이러한 map 함수가 있나요? (나는 브라우저 간의 호환성 문제에 관심이 없으므로 Node.JS를 위해 필요합니다.)

답변 1

많은 사람들이 이전 방법들은 새로운 객체를 반환하는 것이 아니라 객체 자체에서 작동한다고 언급하고 있습니다. 그 때문에 저는 원래 객체 그대로이고 새로운 객체를 반환하는 다른 해결책을 추가하고자 했습니다:

var myObject = { 'a': 1, 'b': 2, 'c': 3 };
// mapFn(value)를 사용하여 각 키의 값을 매핑하여 새 객체를 반환합니다.
function objectMap(object, mapFn) {
return Object.keys(object).reduce(function(result, key) {
result[key] = mapFn(object[key])
return result
}, {})
}
var newObject = objectMap(myObject, function(value) {
return value * 2
})
console.log(newObject);
// => { 'a': 2, 'b': 4, 'c': 6 }
console.log(myObject);
// => { 'a': 1, 'b': 2, 'c': 3 }

Array.prototype.reduce은 이전의 값을 현재 값과 어느 정도 병합하여 배열을 단일 값으로 줄입니다. 체인은 빈 객체인 {}로 초기화됩니다. 각 반복마다 myObject의 새로운 키가 두 배의 값으로 추가됩니다.


업데이트


새로운 ES6 기능으로, objectMap을 더 우아하게 표현할 수 있습니다.




const objectMap = (obj, fn) =>
Object.fromEntries(
Object.entries(obj).map(
([k, v], i) => [k, fn(v, k, i)]
)
)

const myObject = { a: 1, b: 2, c: 3 }
console.log(objectMap(myObject, v => 2 * v))


답변 2

객체에 대한 맵 함수 (배열이 아닌 경우)
맵 함수는 JavaScript에서 배열을 변형하는 데에 자주 사용되는 메서드입니다. 그러나 배열뿐만 아니라 객체에 대해서도 맵 함수를 사용할 수 있습니다. 객체에 대한 맵 함수를 사용하면 효율적인 코드 작성 및 객체의 속성을 변형하는 작업을 간단하게 수행할 수 있습니다.
객체에 대한 맵 함수는 객체의 각 속성을 반복하면서 각 속성의 값을 변형하는 데에 사용됩니다. 이를 통해 객체의 속성을 업데이트하거나 새로운 속성을 추가할 수 있습니다.
예를 들어, 아래와 같은 객체가 있다고 가정해봅시다.
```javascript
const user = {
name: 'John',
age: 30,
occupation: 'developer'
};
```
우리는 이 객체의 각 속성에 대해 작업을 수행하고자 할 수 있습니다. 예를 들어, 나이를 1 증가시키거나 직업을 업데이트하고 싶을 수 있습니다. 이러한 작업을 수행하기 위해 객체에 대한 맵 함수를 사용할 수 있습니다.
```javascript
const updatedUser = Object.fromEntries(
Object.entries(user).map(([key, value]) => {
if (key === 'age') {
return [key, value + 1];
}
if (key === 'occupation') {
return [key, 'engineer'];
}
return [key, value];
})
);
```
위의 코드에서 우리는 `Object.entries()` 메서드를 사용하여 객체의 속성을 `[키, 값]` 쌍의 배열로 변환합니다. 그런 다음, `map()` 함수를 사용하여 배열의 각 쌍에 대해 작업을 수행합니다. 여기서 `key`는 속성의 이름이고 `value`는 해당 속성의 값입니다. 만약 특정 조건에 따라 속성의 값을 변형하고자 한다면, 해당 조건과 일치하는 경우 변형된 값을 반환하고, 그렇지 않은 경우에는 기존 값을 반환합니다. 마지막으로, `Object.fromEntries()` 메서드를 사용하여 배열을 객체로 다시 변환합니다.
위의 코드를 실행하면 우리는 변형된 객체 `updatedUser`를 얻게 됩니다. 여기서는 나이가 1 증가하고, 직업은 'engineer'로 업데이트된 것을 볼 수 있습니다.
객체에 대한 맵 함수는 많은 경우에 유용하게 사용될 수 있습니다. 예를 들어, 대량의 데이터가 포함된 객체 배열에서 특정 조건을 만족하는 객체를 찾기 위해 맵 함수를 사용할 수 있습니다. 이러한 기능을 효율적으로 구현할 수 있으므로 프로그램의 성능을 향상시키는 데에 도움이 됩니다.
객체에 대한 맵 함수를 활용하는 것은 JavaScript 코드를 깔끔하고 효율적으로 작성하는 데에 도움이 됩니다. 객체의 속성을 반복하면서 작업을 수행하는 작업은 코드의 가독성을 향상시키고 유지보수를 용이하게 합니다.
따라서, JavaScript에서 객체에 대한 맵 함수는 유용한 도구로 활용될 수 있으며, 객체의 속성을 변형하는 등의 작업을 쉽게 수행할 수 있도록 도와줍니다. 이를 통해 개발자들은 더욱 효율적이고 관리하기 쉬운 코드를 작성할 수 있습니다.

반응형
Comments