복붙노트

[NODEJS] 객체로 변환 배열

NODEJS

객체로 변환 배열

해결법


  1. 1.ECMAScript를 6 소개 쉽게 polyfillable Object.assign를 :

    ECMAScript를 6 소개 쉽게 polyfillable Object.assign를 :

    Object.assign({}, ['a','b','c']); // {0:"a", 1:"b", 2:"c"}
    

    이 열거되지 않기 때문에 배열의 자신의 길이 속성은 복사되지 않습니다.

    또한, 동일한 결과를 달성하기 위해 ES6 확산 구문을 사용할 수 있습니다 :

    { ...['a', 'b', 'c'] }
    

  2. 2.이 같은 기능으로 :

    이 같은 기능으로 :

    function toObject(arr) {
      var rv = {};
      for (var i = 0; i < arr.length; ++i)
        rv[i] = arr[i];
      return rv;
    }
    

    귀하의 배열은 이미 다소간 단지 객체이지만, 배열은 정수 명명 된 속성에 대한 일부 "흥미로운"특별한 행동을해야합니까. 위의 당신에게 일반 객체를 제공 할 것입니다.

    편집 오 또한 배열에서 "구멍"에 대한 계정에 할 수 있습니다 :

    function toObject(arr) {
      var rv = {};
      for (var i = 0; i < arr.length; ++i)
        if (arr[i] !== undefined) rv[i] = arr[i];
      return rv;
    }
    

    현대 자바 스크립트 런타임에서는 .reduce () 메소드를 사용할 수 있습니다 :

    var obj = arr.reduce(function(acc, cur, i) {
      acc[i] = cur;
      return acc;
    }, {});
    

    그의 .reduce ()가 어떻게 작동하는지 때문 하나는, 배열의 "구멍"을 피할 수 있습니다.


  3. 3.당신은 누적 일명 감소 사용할 수 있습니다.

    당신은 누적 일명 감소 사용할 수 있습니다.

    ['a','b','c'].reduce(function(result, item, index, array) {
      result[index] = item; //a, b, c
      return result;
    }, {}) //watch out the empty {}, which is passed as "result"
    

    시작 지점으로 빈 객체를 {} 통과; 다음 "오그"점진적으로 그 객체. { "A", "1", "B", "2", "C", "0"}을 반복의 끝에서, 그 결과가 될 것

    당신의 배열은 키 - 값 쌍의 개체 집합 인 경우 :

    [{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item) {
      var key = Object.keys(item)[0]; //first property: a, b, c
      result[key] = item[key];
      return result;
    }, {});
    

    생성한다 {A : 1, B 2, C : 3}

    완벽을 위해, reduceRight는 역순으로 배열을 반복을 수행 할 수 있습니다 :

    [{ a: 1},{ b: 2},{ c: 3}].reduceRight(/* same implementation as above */)
    

    생성한다 {C : (3), B : (2), 1}

    귀하의 축적은 특정 목적을위한 모든 유형이 될 수 있습니다. 키 배열과의 개체의 값을 교환하기 위해, 예를 들어, [] 건네

    [{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item, index) {
      var key = Object.keys(item)[0]; //first property: a, b, c
      var value = item[key];
      var obj = {};
      obj[value] = key;
      result.push(obj);
      return result;
    }, []); //an empty array
    

    생성 할 것이다 : {1 : "A"}, {2 'B'}, {3 : "C"}]

    지도는 달리, 1-1 매핑으로 사용되지 않을 수 있습니다 줄일 수 있습니다. 당신은 당신이 포함하거나 제외 할 항목을 완벽하게 제어 할 수 있습니다. 따라서 감소는 필터 차종은 매우 다양한 줄일 수있는 무엇을 달성 할 수 있습니다 :

    [{ a: 1},{ b: 2},{ c: 3}].reduce(function(result, item, index) {
      if(index !== 0) { //skip the first item
        result.push(item);
      }
      return result;
    }, []); //an empty array
    

    생성한다 : [{2 'B'}, {3 : "C"}]

    주의 : 줄이고 Object.key는 ECMA 5 판의 일부입니다; 당신은 그들 (특히 IE8)을 지원하지 않는 브라우저에 대한 polyfill을 제공해야합니다.

    모질라하여 기본 구현을 참조하십시오.


  4. 4.당신이 jQuery를 사용하는 경우 :

    당신이 jQuery를 사용하는 경우 :

    $.extend({}, ['a', 'b', 'c']);
    

  5. 5.완전성을 위해서, ECMAScript를 2,015 (ES6)는 확산. transpiler (바벨) 또는 적어도 ES6 실행 환경 중 하나가 필요합니다.

    완전성을 위해서, ECMAScript를 2,015 (ES6)는 확산. transpiler (바벨) 또는 적어도 ES6 실행 환경 중 하나가 필요합니다.

    CONSOLE.LOG ( {... [ 'A', 'B', 'C']} )


  6. 6.(아주 드물게 나는 손에 underscorejs 라이브러리가없는되지 않을 것이기 때문에) 나는 아마이 방법을 써서 :

    (아주 드물게 나는 손에 underscorejs 라이브러리가없는되지 않을 것이기 때문에) 나는 아마이 방법을 써서 :

    var _ = require('underscore');
    
    var a = [ 'a', 'b', 'c' ];
    var obj = _.extend({}, a);
    console.log(obj);
    // prints { '0': 'a', '1': 'b', '2': 'c' }
    

  7. 7.보고되지 놀란 -

    보고되지 놀란 -

    CONSOLE.LOG ( Object.assign ({} [ 'A', 'B', 'C']) )


  8. 8.다음은 단지 완벽에 대한 O (1) ES2015 방법이다.

    다음은 단지 완벽에 대한 O (1) ES2015 방법이다.

    var arr = [1, 2, 3, 4, 5]; // array, already an object
    Object.setPrototypeOf(arr, Object.prototype); // now no longer an array, still an object
    

  9. 9.우리는 Object.assign를 사용하여 객체에 배열을 변환하는 기능을 array.reduce 수 있습니다. VAR 도착 = [{A : {B : 1}}, {C : D {2}}] VAR NEWOBJ arr.reduce = ((a, b) => Object.assign (a, b), {}) CONSOLE.LOG (NEWOBJ)

    우리는 Object.assign를 사용하여 객체에 배열을 변환하는 기능을 array.reduce 수 있습니다. VAR 도착 = [{A : {B : 1}}, {C : D {2}}] VAR NEWOBJ arr.reduce = ((a, b) => Object.assign (a, b), {}) CONSOLE.LOG (NEWOBJ)


  10. 10.나는 그것이 ECMAScript를 2015 년 (ES6) 표준의 일부이기 때문에, 객체 확산 연산자를 사용하여 끝났다.

    나는 그것이 ECMAScript를 2015 년 (ES6) 표준의 일부이기 때문에, 객체 확산 연산자를 사용하여 끝났다.

    const array = ['a', 'b', 'c'];
    console.log({...array});
    // it outputs {0:'a', 1:'b', 2:'c'}
    

    예를 들어 다음과 같은 바이올린을했다.


  11. 11.

    Object.assign({}, ['one', 'two']); // {0: 'one', 1: 'two'}
    

    하나의 개체에서 다른 값 : 현대 자바 스크립트에서 쉬운 방법은 아무것도하지만, 복사 키를하지 않습니다 Object.assign ()를 사용하는 것입니다. 우리의 경우, 배열은 새에 속성을 기부 {}.


  12. 12.ES2016, 객체에 대한 확산 운영자하십시오. 참고 :이 ES6 후이며 transpiler 조정해야합니다 그래서.

    ES2016, 객체에 대한 확산 운영자하십시오. 참고 :이 ES6 후이며 transpiler 조정해야합니다 그래서.

    CONST 도착 = 'A', 'B'를 'C']; CONST OBJ 도착 = {...}; // -> {0 "은"1 "B", 2 : "C"}


  13. 13.5 년 후, 좋은 방법이있다 :

    5 년 후, 좋은 방법이있다 :

    Object.assign는 ECMAScript를 2015 년에 도입되었다.

    Object.assign({}, ['a', 'b', 'c'])
    // {'0':'a', '1':'b', '2':'c'}
    

  14. 14.자바 스크립트 #의 foreach 문을 사용하여이 작업을 수행 할 수 있습니다

    자바 스크립트 #의 foreach 문을 사용하여이 작업을 수행 할 수 있습니다

    var result = {},
        attributes = ['a', 'b','c'];
    
    attributes.forEach(function(prop,index) {
      result[index] = prop;
    });
    

    ECMA6로 :

    attributes.forEach((prop,index)=>result[index] = prop);
    

  15. 15.FWIW, 하나는 또 다른 최근의 접근 방식은 Object.entries 다음과 함께 새로운 Object.fromEntries을 사용하는 것입니다 :

    FWIW, 하나는 또 다른 최근의 접근 방식은 Object.entries 다음과 함께 새로운 Object.fromEntries을 사용하는 것입니다 :

    const arr = ['a','b','c'];
    arr[-2] = 'd';
    arr.hello = 'e';
    arr.length = 17;
    const obj = Object.fromEntries(Object.entries(arr));
    

    ... 비 인덱스 (예를 들면, 비 양성 정수 / 숫자가 아닌) 키 정의 또는 널 및 보존과 같은 기억 희소 배열 항목을 회피하기위한 허용한다.

    (여기 @ 폴 드레이퍼의 Object.assign 대답과 동일 결과.)

    하나는 포함되지 않는, 그러나 arr.length을 추가 할 수 있습니다 :

    obj.length = arr.length;
    

  16. 16.당신은 확산 연산자를 사용할 수 있습니다

    당신은 확산 연산자를 사용할 수 있습니다

    x = [1,2,3,10]
    {...x} // {0:1, 1:2, 2:3, 3:10}
    

  17. 17.당신이 ES6를 사용하는 경우, 당신은 Object.assign 및 확산 연산자를 사용할 수 있습니다

    당신이 ES6를 사용하는 경우, 당신은 Object.assign 및 확산 연산자를 사용할 수 있습니다

    { ...['a', 'b', 'c'] }
    

    당신은 같은 중첩 된 배열이있는 경우

    var arr=[[1,2,3,4]]
    Object.assign(...arr.map(d => ({[d[0]]: d[1]})))
    

  18. 18.신속하고 더러운 일 :

    신속하고 더러운 일 :

    var obj = {},
      arr = ['a','b','c'],
      l = arr.length; 
    
    while( l && (obj[--l] = arr.pop() ) ){};
    

  19. 19.신속하고 더러운 # 2 :

    신속하고 더러운 # 2 :

    var i = 0
      , s = {}
      , a = ['A', 'B', 'C'];
    
    while( a[i] ) { s[i] = a[i++] };
    

  20. 20.Lodash 3.0.0의로서 당신은 _.toPlainObject을 사용할 수 있습니다

    Lodash 3.0.0의로서 당신은 _.toPlainObject을 사용할 수 있습니다

    VAR OBJ _ktoflanobjecht = ([ 'A', 'B', 'F']); Kansolklog OBJ (); <스크립트 SRC = "https : //로 chdnkjsdeliwrknet / LOD를 / 4kl6k4 / lodskmnkjs">


  21. 21.여기에 그냥 쓴 재귀 함수입니다. 그것은 간단하고 잘 작동합니다.

    여기에 그냥 쓴 재귀 함수입니다. 그것은 간단하고 잘 작동합니다.

    // Convert array to object
    var convArrToObj = function(array){
        var thisEleObj = new Object();
        if(typeof array == "object"){
            for(var i in array){
                var thisEle = convArrToObj(array[i]);
                thisEleObj[i] = thisEle;
            }
        }else {
            thisEleObj = array;
        }
        return thisEleObj;
    }
    

    여기에 예제 (jsFiddle는)입니다 :

    var array = new Array();
    array.a = 123;
    array.b = 234;
    array.c = 345;
    var array2 = new Array();
    array2.a = 321;
    array2.b = 432;
    array2.c = 543;
    var array3 = new Array();
    array3.a = 132;
    array3.b = 243;
    array3.c = 354;
    var array4 = new Array();
    array4.a = 312;
    array4.b = 423;
    array4.c = 534;
    var array5 = new Array();
    array5.a = 112;
    array5.b = 223;
    array5.c = 334;
    
    array.d = array2;
    array4.d = array5;
    array3.d = array4;
    array.e = array3;
    
    
    console.log(array);
    
    // Convert array to object
    var convArrToObj = function(array){
        var thisEleObj = new Object();
        if(typeof array == "object"){
            for(var i in array){
                var thisEle = convArrToObj(array[i]);
                thisEleObj[i] = thisEle;
            }
        }else {
            thisEleObj = array;
        }
        return thisEleObj;
    }
    console.log(convArrToObj(array));
    

    결과 :


  22. 22.

    .reduce((o,v,i)=>(o[i]=v,o), {})
    

    [문서]

    또는 더 자세한

    var trAr2Obj = function (arr) {return arr.reduce((o,v,i)=>(o[i]=v,o), {});}
    

    또는

    var transposeAr2Obj = arr=>arr.reduce((o,v,i)=>(o[i]=v,o), {})
    

    바닐라와 최단 하나 JS

    JSON.stringify([["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[i]=v,o}, {}))
    => "{"0":["a","X"],"1":["b","Y"]}"
    

    좀 더 복잡한 예제

    [["a", "X"], ["b", "Y"]].reduce((o,v,i)=>{return o[v[0]]=v.slice(1)[0],o}, {})
    => Object {a: "X", b: "Y"}
    

    ({; 리턴 E; CONSOLE.LOG (E)} === (E) => (CONSOLE.LOG (E), E) 함수 (E)를 사용하여)에도 짧은

     nodejs
    > [[1, 2, 3], [3,4,5]].reduce((o,v,i)=>(o[v[0]]=v.slice(1),o), {})
    { '1': [ 2, 3 ], '3': [ 4, 5 ] }
    

    [/ 문서]


  23. 23.내가 Array.of으로이 간단 할 것 (). 의 배열 생성자로의 컨텍스트를 사용할 수있는 기능을 가지고있다.

    내가 Array.of으로이 간단 할 것 (). 의 배열 생성자로의 컨텍스트를 사용할 수있는 기능을 가지고있다.

    우리는 함수 () Array.of 결합과 같은 객체 배열을 생성 할 수 있도록.

    더미 함수 () {}; VAR 꼬 = Array.of.apply (더미 [1,2,3,4]); CONSOLE.LOG (꼬);

    Array.of을 이용하여 () 하나도 어레이 서브 클래스라는 할 수있다.


  24. 24.당신은지도 나 Object.assign를 사용할 수 있다면, 그것은 매우 간단합니다.

    당신은지도 나 Object.assign를 사용할 수 있다면, 그것은 매우 간단합니다.

    배열을 만듭니다

    const languages = ['css', 'javascript', 'php', 'html'];
    

    아래는 키와 인덱스 객체를 생성합니다 :

    Object.assign({}, languages)
    

    지도에서 위와 동일한 복제

    인덱스 기반의 객체로 변환 {0 : 'CSS'} 등 ...

    const indexMap = new Map(languages.map((name, i) => [i, name] ));
    indexMap.get(1) // javascript
    

    값 기반의 객체로 변환 {CSS : 'CSS가 큰'} 등 ...

    const valueMap = new Map(languages.map(name => [name, `${name} is great!`] ));
    valueMap.get('css') // css is great
    

  25. 25.빨리 객체에있는 항목의 배열을 변환하는 간단하고 건방진 방법

    빨리 객체에있는 항목의 배열을 변환하는 간단하고 건방진 방법

    function arrayToObject( srcArray ){
        return  JSON.parse( JSON.stringify( srcArray ) );
    }
    

    그리고 그렇게 좋아하여 ...

    var p = [0,2,3,'pork','pie',6];
    obj = new arrayToObject( p );
    console.log( obj[3], obj[4] )
    // expecting `pork pie`
    

    산출:

    pork pie
    

    유형을 확인 :

    typeof obj
    "object"
    

    프로토 타입의 방법이 아닌 경우와 상황이 완전하지 않을 것이다

    Array.prototype.toObject =function(){
        return  JSON.parse( JSON.stringify( this ) );
    }
    

    같은 사용 :

    var q = [0,2,3,'cheese','whizz',6];
    obj = q.toObject();
    console.log( obj[3], obj[4] )
    // expecting `cheese whizz`
    

    산출:

    cheese whizz
    

    * 그래서 당신이 특정 이름을 갖고 싶어, 당신은 아래의 기존의 방법을 계속해야합니다 어떤 이름 루틴이없는 참고.

    이전 방법

    이것은 당신이 배열에서 당신은 당신이 그들을 원하는 순서 정의 키를 사용하여 객체를 생성 할 수 있습니다.

    Array.prototype.toObject = function(keys){
        var obj = {};
        var tmp = this; // we want the original array intact.
        if(keys.length == this.length){
            var c = this.length-1;
            while( c>=0 ){
                obj[ keys[ c ] ] = tmp[c];
                c--;
            }
        }
        return obj;
    };
    
    result = ["cheese","paint",14,8].toObject([0,"onion",4,99]);
    

    CONSOLE.LOG ( ">>>"+ result.onion); 출력됩니다 "페인트"함수는 동일한 길이의 배열을 가지고 있어야하거나 빈 개체를 가져옵니다.

    여기서 업데이트 방법은

    Array.prototype.toObject = function(keys){
        var obj = {};
        if( keys.length == this.length)
            while( keys.length )
                obj[ keys.pop() ] = this[ keys.length ];
        return obj;
    };
    

  26. 26.내가 = 0하자; 하자에서 myArray = "첫 번째", "두 번째", "세 번째", "제"]; CONST arrayToObject = (도착) => Object.assign ({}, ... arr.map (항목 => ({[I ++] 항목}))); CONSOLE.LOG (arrayToObject (myArray의));

    내가 = 0하자; 하자에서 myArray = "첫 번째", "두 번째", "세 번째", "제"]; CONST arrayToObject = (도착) => Object.assign ({}, ... arr.map (항목 => ({[I ++] 항목}))); CONSOLE.LOG (arrayToObject (myArray의));

    또는 사용

    에서 myArray = "첫 번째", "두 번째", "세 번째", "제"] CONSOLE.LOG ({...에서 myArray})


  27. 27.ES5 - 솔루션 :

    ES5 - 솔루션 :

    배열 프로토 타입 기능 '푸시'를 사용하고 배열 요소와 객체를 채울 수 있습니다 '적용'.

    VAR 도착 = 'A', 'B', 'C']; VAR OBJ = 새 개체 (); Array.prototype.push.apply (OBJ, 도착); CONSOLE.LOG (OBJ); {// '0': 'A', '1': 'B', '2': 'C', 길이 : 3} CONSOLE.LOG (OBJ [2]); // 씨


  28. 28.더 많은 브라우저가 지원하고 그 일을 더 유연한 방법처럼 뭔가를 정상 루프를 사용하고 있습니다 :

    더 많은 브라우저가 지원하고 그 일을 더 유연한 방법처럼 뭔가를 정상 루프를 사용하고 있습니다 :

    const arr = ['a', 'b', 'c'],
    obj = {};
    
    for (let i=0; i<arr.length; i++) {
       obj[i] = arr[i];
    }
    

    뿐만 아니라 현대적인 방법처럼, 확산 연산자를 사용 할 수 있습니다 :

    {...arr}
    

    또는 개체 할당 :

    Object.assign({}, ['a', 'b', 'c']);
    

    모두 반환합니다 :

    {0: "a", 1: "b", 2: "c"}
    

  29. 29.이 같은 기능을 사용할 수 있습니다 :

    이 같은 기능을 사용할 수 있습니다 :

    var toObject = function(array) {
        var o = {};
        for (var property in array) {
            if (String(property >>> 0) == property && property >>> 0 != 0xffffffff) {
                o[i] = array[i];
            }
        }
        return o;
    };
    

    이 사람은보다 효율적으로 스파 스 배열을 처리해야합니다.


  30. 30.여기에 커피 스크립트의 솔루션입니다

    여기에 커피 스크립트의 솔루션입니다

    arrayToObj = (arr) ->
      obj = {}
      for v,i in arr
        obj[i] = v if v?
      obj
    
  31. from https://stackoverflow.com/questions/4215737/convert-array-to-object by cc-by-sa and MIT license