개체 매핑 기능 (배열 대신)

:에서이 번역 개체에 대한지도 기능 (배열 대신의)

나는 개체가 : 내가 객체를 가지고 :

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

네이티브 AM의 I 방법을 찾고는 ,, 유사 Array.prototype.mapAS 것 사용하는 다음 : I과 유사한 찾고 있어요 Array.prototype.map다음과 같은 방법으로 될 것입니다 기본 방법 :

newObject = myObject.map(function (value, label) {
    return value * value;
});

// newObject is now { 'a': 1, 'b': 4, 'c': 9 }

와 같은 자바 스크립트합니까를 가지고있는 map객체에 대한 기능을? 자바 스크립트 객체의 여부를 map기능? 합니다 (나는 그래서 정보] 내가 케어 크로스 브라우저 및 연체를하지 않는, Node.js를 위해이 작업을합니다.) (내가 크로스 브라우저 문제에 대해 걱정하지 않도록, Node.js를로 사용하려고합니다.)


# 1 층

참조 : https://stackoom.com/question/108t8/ 매핑 기능 개체 - 대신 배열


하우스 # 2

상기 map function온 존재하지 않는 Object.prototypeSO IT CAN 에뮬레이션이 마음 그러나 map functionObject.prototype에 존재하지 않는,하지만 당신은 이런 식으로 시뮬레이션 할 수 있습니다

var myMap = function ( obj, callback ) {

    var result = {};

    for ( var key in obj ) {
        if ( Object.prototype.hasOwnProperty.call( obj, key ) ) {
            if ( typeof callback === 'function' ) {
                result[ key ] = callback.call( obj, obj[ key ], key, obj );
            }
        }
    }

    return result;

};

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

var newObject = myMap( myObject, function ( value, key ) {
    return value * value;
});

하우스 # 3

: 그것은 하나를 작성하는 아주 쉬운 아주 간단한 쓰기 :

Object.map = function(o, f, ctx) {
    ctx = ctx || this;
    var result = {};
    Object.keys(o).forEach(function(k) {
        result[k] = f.call(ctx, o[k], k, o); 
    });
    return result;
}

예 코드 : 실시 예 번호 :

> o = { a: 1, b: 2, c: 3 };
> r = Object.map(o, function(v, k, o) {
     return v * v;
  });
> r
{ a : 1, b: 4, c: 9 }

NB : 또한 android.permission에서이 버전 (선택 사항) 설정하는 this콜백에서의 단지는 상기와 같은에 대한 상황에 맞는 Array방법 ,. 참고 :이 버전은 또한 당신이 (선택 사항) 콜백 설정할 수 있습니다 this상황, 단지 Array같은 방법으로.

편집 - 제거의 사용으로 변경 Object.prototype의로는, IT는 이름의 기존 속성과 충돌하지 않는지 확인 map오브젝트에 ON. 편집 - 변경의 삭제 Object.prototype개체에 대한 기존의 사용과 관련되지 않은 그 이름을 보장하기 위하여 map충돌 속성을 .


# 4 층

기본은 NO이없는 map상기에 Object개체하지만 방법이 소개 : 하지에 Object지역 개체 map만 처리하는 방법 :

 var myObject = { 'a': 1, 'b': 2, 'c': 3 }; Object.keys(myObject).map(function(key, index) { myObject[key] *= 2; }); console.log(myObject); // => { 'a': 2, 'b': 4, 'c': 6 } 

쉽게 당신은 있지만 통해 사용하여 객체를 반복 할 수있다 for ... in: 하지만 당신은 사용할 수있는 for ... in다음과 같은 쉽게 반복 객체를 객체 :

 var myObject = { 'a': 1, 'b': 2, 'c': 3 }; for (var key in myObject) { if (myObject.hasOwnProperty(key)) { myObject[key] *= 2; } } console.log(myObject); // { 'a': 2, 'b': 4, 'c': 6 } 

업데이트 업데이트

많은 사람들이 있음을 언급하고 있습니다 . 이전의 방법은 새로운 개체를 반환 것이 아니라 객체 자체에서 작동하지 않는 이전 방법에서 언급 된 많은 사람들이 새로운 객체를 반환하지 않고, 객체 자체가 작동합니다. 그 문제를 들어 내가 다른 추가하고 싶었 새로운 객체와 잎을 그대로 원래의 객체 반환 솔루션 : 이러한 이유로, 나는 다른 솔루션을 추가 할을,이 솔루션은 새로운 객체를 반환하고 변경되지 않은 원래의 개체를 유지하는 것입니다 :

 var myObject = { 'a': 1, 'b': 2, 'c': 3 }; // returns a new object with the values at each key mapped using 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하여 하나의 값으로 배열 감소 다소 현재와 이전 값을 병합한다. Array.prototype.reduce이전의 값과 어느 정도의 전류 값을 병합하여, 상기 어레이는 하나의 값으로 감소 될 것이다. 카테 alberghiera 초기화 오브젝트 인 비어로 {}. 체인 빈 객체로 구성 {}초기화. 모든 반복 새로운 새로운 키 ON myObject키 값에 2 회 AS 첨가된다. 각 반복에서, 추가 할 myObject새로운 값을 결합하고, 결합 두배.

업데이트 업데이트

새로운 새로운 ES6와 특징, 표현하는 더 우아한 방법이있다 objectMap. 새로운 기능 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)) 


하우스 # 5

귀하가 사용할 수 Object.keys와 다음 forEach을 통해 키의 반환 배열에서 : 당신은 할 수 있습니다 Object.keys다음 키를 반환 배열을 사용 forEach:

var myObject = { 'a': 1, 'b': 2, 'c': 3 },
    newObject = {};
Object.keys(myObject).forEach(function (key) {
    var value = myObject[key];
    newObject[key] = value * value;
});

아니면 더 모듈 방식 : 이상의 모듈 식 방법 :

function map(obj, callback) {
    var result = {};
    Object.keys(obj).forEach(function (key) {
        result[key] = callback.call(obj, obj[key], key, obj);
    });
    return result;
}

newObject = map(myObject, function(x) { return x * x; });

그 노트 Object.keys객체의 자신의 Enumerable에서 속성에만 포함 반환하는 배열은, 따라서 같은 동작 for..in으로 루프 A hasOwnProperty검사. 주의하시기 바랍니다 Object.keys그것과 같이 동작하도록 배열 속성 수익을 열거 할 수는 만 개체 자체를 포함 hasOwnProperty확인 for..in사이클.


하우스 # 6

기본 방법 NO, 그러나 lodash # mapValues 의지는 훌륭하게에서 일을 할 네이티브 메소드하지 않고 있지만, lodash #의 mapValues은 잘 작업 할 수 있습니다

_.mapValues({ 'a': 1, 'b': 2, 'c': 3} , function(num) { return num * 3; });
// → { 'a': 3, 'b': 6, 'c': 9 }
원저는 0 출판 · 원 찬양 73 · 전망 550 000 +를

추천

출처blog.csdn.net/w36680130/article/details/105340527