복붙노트

[JQUERY] 어떻게 키에 의해 두 개의 개체 값을 병합

JQUERY

어떻게 키에 의해 두 개의 개체 값을 병합

해결법


  1. 1.당신은 깊은 연장 할

    당신은 깊은 연장 할

    $.extend(true, {}, x, y);
    

    jQuery.extend의 ​​문서를 참조하십시오 ([깊이], 대상, 오브젝트 1 [objectN])


  2. 2.jQuery를 사용하면 중첩 된 개체가이 JSON 객체를 병합하는 데 도움이 될 것입니다 의존하지 않고 간단한 자바 스크립트 기능.

    jQuery를 사용하면 중첩 된 개체가이 JSON 객체를 병합하는 데 도움이 될 것입니다 의존하지 않고 간단한 자바 스크립트 기능.

    function mergeJSON(source1,source2){
        /*
         * Properties from the Souce1 object will be copied to Source2 Object.
         * Note: This method will return a new merged object, Source1 and Source2 original values will not be replaced.
         * */
        var mergedJSON = Object.create(source2);// Copying Source2 to a new Object
    
        for (var attrname in source1) {
            if(mergedJSON.hasOwnProperty(attrname)) {
              if ( source1[attrname]!=null && source1[attrname].constructor==Object ) {
                  /*
                   * Recursive call if the property is an object,
                   * Iterate the object and set all properties of the inner object.
                  */
                  mergedJSON[attrname] = mergeJSON(source1[attrname], mergedJSON[attrname]);
              } 
    
            } else {//else copy the property from source1
                mergedJSON[attrname] = source1[attrname];
    
            }
          }
    
          return mergedJSON;
    }
    

  3. 3.ES2018의 새로운 확산 운영자는이 작업을 수행하는 몇 가지 좋은 방법을 제공합니다 :

    ES2018의 새로운 확산 운영자는이 작업을 수행하는 몇 가지 좋은 방법을 제공합니다 :

    기능이 결합 (...리스트) { 반환 list.reduce ( (a, b) => { 반환 {... A, ... B} } ) } // 작업은 간단한 개체 예상대로 CONSOLE.LOG ( 결합시키다( {X : 3, Z : 1}, {X 4, m : 4}, {A : 1} B {2} )); // 좋은 재귀 해결책이 아니다 CONSOLE.LOG ( 결합시키다( {X : 3, Z 1, 아이 {C : 1}} {X 4, m : 4, 아이 {D : 3}} {A : 1} B {2} ));

    이것은 내가 얻을 수있는 최선의 재귀 솔루션이었습니다

    함수 combine_recursive (...리스트) { 반환 list.reduce ( (a, b) => { 존재 또는 경우 // 비 객체는 B를 반환 만약 (! (A instanceof를 개체) ||! (나 객체 instanceof를)) { B를 반환! == 정의되지? B : A는; } // 객체에 대한 열쇠를 얻고 그들을 결합 CONST 키 = Object.keys (a) .concat (Object.keys (b)); (keys.map 반환 키 => { 창 {[키] combine_recursive (a [키], B [키])} } ).줄이다( (X, Y) => { ... 창 {X, Y} ... } ); } ) } // 테스트 재귀 및 우선 순위 CONSOLE.LOG ( combine_recursive ( {X : 3, Z 1, 아이 {C : 1, K : 1}} {X 4, m : 4, 아이 {D : 3, K 2}} {A : 1} B {2} )); // 질문의 예를 사용하여 VAR X = { "학생 표시": { '수학'1, '물리학': 5}}; var에 Y = { "학생 표시": { '화학': 3, '역사': 2}}; CONSOLE.LOG (combine_recursive (X, Y));


  4. 4.

        https://gist.github.com/samad-aghaei/7250ffb74ed80732debb1cbb14d2bfb0
    
    <pre>
    /**
    This script can merge two multi dimensional associative array/objects in javascript by comparing given object with its reference and 
    will remove additional given keys, adding missed parameteres and also validating values without overhead. Also it will return the default values if no input presented with re-usable reference!
    Tested on IE8 and greater.
    **/
    var module = (function(){
        //To make our reference variable onchangable, have to put it into a function which is fster and more efficient than "JSON.parse(JSON.stringify(VARIABLE))"
        var _defs = function(){
                return {
                       //string, number and boolean are actually regex based validation keys on input values.
                    a: ["string", 'Defaul value for "a"'],
                    b: ["number", 300],
                    c: ["boolean", true],
                    d: {
                      da: ["boolean", true],
                      db: ["string", 'Defaul value for "db"'],
                      dc: {
                        dca: ["number", 200],
                        dcb: ["string", 'Default value for "dcb"'],
                        dcc: ["number", 500],
                        dcd: ["boolean", true]
                      },
                      dce: ["string", 'Default value for "dce"'],
                    },
                    e: ["number", 200],
                    f: ["boolean", 0],
                    g: ["", 'This is an internal extra parameter']
                }
            }
    
            var _validation = {
                    number: function (defaultValue, userValue) {
                      if(/^[0-9]+$/.test(userValue)) //Only numbers allowed
                        return userValue;
                      else return defaultValue;
                    },
                    string: function (defaultValue, userValue) {
                      if(/^[a-zA-Z\s]*$/.test(userValue)) //Only A to Z case insentitive with space aloowed.
                        return userValue;
                      else return defaultValue;
                    },
                    boolean: function (defaultValue, userValue) {
                      if(typeof userValue === 'boolean') //True or False or 0 ,1
                        return userValue;
                      else return defaultValue;
                    }
            }
    
            var _uniqueMerge = function(opts, _ref){
                    for(var key in _ref)
                        if (_ref && _ref[key] && _ref[key].constructor && _ref[key].constructor === Object)
                          _ref[key] = _uniqueMerge((opts ? opts[key] : null ), _ref[key] );
                        else if(opts && opts.hasOwnProperty(key))
                          _ref[key] = _validation[_ref[key][0]](_ref[key][1], opts[key]); //or without validation on user enties => ref[key] = obj[key]
                        else _ref[key] = _ref[key][1];
                    return _ref;
            }
            var _get = function(inputs){
                return _uniqueMerge(inputs, _defs());
            }
            return {
                options: function(){
                return _get(arguments[0] || null); // for more safety and control on number of input variables! used --> ( arguments[0] || null )
                }
            }
    })();
    
    
    //How to use it:    
    
    input_one = { 
        a : "Hello World", 
      //b : ["number", 400], //User missed this parameter
        c: "Hi",
        d : {
            da : false,
            db : "Hellow! World", // ! is not allowed
            dc : {
                dca : 10,
                dcb : "My String",
                dcc: "3thString",
                dcd : false
          },
          dce: "ANOTHER STRING",
        },
        e: 40,
        f: true,
        z: 'x'
    };
    console.log( JSON.stringify( module.options(input_one), null ,2 ) );
    //Output:
    /*
    {
      "a": "Hello World",
      "b": 300,
      "c": true,
      "d": {
        "da": false,
        "db": "Defaul value for \"db\"",
        "dc": {
          "dca": 10,
          "dcb": "My String",
          "dcc": 500,
          "dcd": false
        },
        "dce": "ANOTHER STRING"
      },
      "e": 40,
      "f": true,
      "g": "This is an internal extra parameter"
    }
    */
    input_two = { 
        a : 32,
      //b : ["number", 400], //User missed this parameter
        c: "Hi",
        d : {
            da : false,
            db : "HelloWorld",
            dc : {
                dca : 10,
                dcb : "My String",
                dcd : false
          },
          dce: 73,
        }
    };
    console.log( JSON.stringify( module.options(input_two), null ,2 ) );
    //output
    /*
    {
      "a": "Defaul value for \"a\"",
      "b": 300,
      "c": true,
      "d": {
        "da": false,
        "db": "HelloWorld",
        "dc": {
          "dca": 10,
          "dcb": "My String",
          "dcc": 500,
          "dcd": false
        },
        "dce": "Default value for \"dce\""
      },
      "e": 200,
      "f": 0,
      "g": "This is an internal extra parameter"
    }
    */
    //Empty input will return the default values!
    console.log( JSON.stringify( module.options(), null ,2 ) );     
    //Output
    /*  
    {
      "a": "Defaul value for \"a\"",
      "b": 300,
      "c": true,
      "d": {
        "da": true,
        "db": "Defaul value for \"db\"",
        "dc": {
          "dca": 200,
          "dcb": "Default value for \"dcb\"",
          "dcc": 500,
          "dcd": true
        },
        "dce": "Default value for \"dce\""
      },
      "e": 200,
      "f": 0,
      "g": "This is an internal extra parameter"
    }
    */</pre>
    

  5. 5.A는 덜 장황 비트.

    A는 덜 장황 비트.

    answer = { "student-marks": Object.assign(x['student-marks'], y['student-marks']) }
    
  6. from https://stackoverflow.com/questions/18498801/how-to-merge-two-object-values-by-keys by cc-by-sa and MIT license