문제

나는 다른 것을 읽었다 SO에 대한 비슷한 질문 그러나 그 질문에는 명확한 대답이 없었습니다.

나는 다음과 같이 보이는 JavaScript 객체를 얻었습니다.

var moveJSON = {
    'name'      : move[0].innerHTML,
    'info'      : move[1].innerHTML,
    'power'     : move[2].innerHTML,
    'accuracy'  : move[3].innerHTML,
    'type'      : move[4].innerHTML,
    'category'  : move[5].innerHTML,
    'pp_min'    : move[6].innerHTML,
    'pp_max'    : move[7].innerHTML
}

Ajax를 통해 PHP로 전송되는 하나의 객체로 병합해야합니다. 그러나 먼저 : 단일 객체 (배열)로 병합하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

이것은 작동해야합니다.

var array = []

array.push(yourObject);

이렇게하면 객체를 배열에 넣습니다. 동일한 객체를 하나에 넣는 경우 사용해야합니다.

다른 값을 하나의 객체로 병합하려면 :

function makeObject(){
        var obj = {};

 obj['info']  = somevalue;    //arguments [0] maybe
 obj['power']  = somevalue;    
 obj['accuracy']   = somevalue;
 obj['type']       = somevalue;
 obj['category']   = somevalue;
 obj['pp_min']     = somevalue;
 obj['pp_max']    = somevalue;

return obj;

}

다음은 배열과 같은 인수를 JavaScript의 함수로 전달하는 것을 설명하는 링크입니다.

http://www.cherny.com/webdev/60/javaScript-function-arguments-Default-Values-Passing-Objects-and-overloading

다른 팁

"병합"객체는 객체를 배열에 넣는 것과 다릅니다. 단일 객체를 통과 할 수 있지만이 집계는 병합 된 물체와 구조적으로 다릅니다. 집계는 배열 인 새 컨테이너의 값에 액세스 할 때 깊이 수준을 추가합니다. 이것은 동일한 컨테이너, 물체를 초래하는 병합과 다릅니다.

dojo를 사용하는 경우 할 수있는 것보다 :

var mergedObject = dojo.mixin(object1, object2);

그렇지 않으면 두 개 이상의 개체를 병합하는 간단한 방법이 있습니다.

var merge = function() {
    var result = {},
        length = arguments.length,
        object = null,
        key    = null;

    if ( length < 2 ) {
        throw "Must merge two or more objects";
    }

    for ( var i=0; i<length; ++i ) {
        object = arguments[i];
        for ( var key in object ) {
            if ( !object.hasOwnProperty(key) ) { continue; }
            result[key] = object[key];
        }
    }
    return result;
};

var mergedObject = merge({a:1}, {b:2, c:3, d: {a: 1}}, {a: 2, c:[1,2,3]});
// mergedObject looks like {a:4, b:2, c:[1,2,3], d:{a:1}}

보시다시피, 이것은 집계와 매우 다릅니다.

var aggregate = function() {
    if ( length < 2 ) {
        throw "Must aggregate two or more objects";
    }

    // The following can be simplified to 
    //   return Array.prototype.slice.call(arguments);
    // but is left in a more explicit manner to illustrate the difference

    var result = [],
        length = arguments.length;

    for ( var i=0; i<length; ++i ) {
        if ( arguments.hasOwnProperty(i) ) {
            result.push(arguments[i]);
        }
    }

    return result;
};

var aggregation = aggregate({a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]});
// aggregation looks like [{a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]}];

차이점은 그 것입니다 mergedObject 보입니다 {a:4, b:2, c:[1,2,3], d:{a:1}}, 위치 d 액세스합니다 mergedObject.d, 반대로 aggregation, 어떻게 생겼는지 [{a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]}] 그리고 위치 d 액세스합니다 aggregation[1].d.

또한 JavaScript에서 사용할 수있는 문자 배열 정의 구문 덕분에 집계에 대한 명시 적 기능이 필요하지 않다는 점도 주목해야합니다.

var aggregation = aggregate({a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]});

동일합니다

var aggregation = [{a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]}];

여러 JSON 객체가있는 경우 포함 된 JSON 객체를 만들 수 있습니다.

var containerJSON = {};

해당 객체를 배열로 사용하십시오.

containerJSON[0] = moveJSON_1;
containerJSON[1] = moveJSON_2;

그런 다음 PHP에서는 json_decode ()를 사용하여 데이터를 다시 얻을 수 있습니다.

이것은 기존 객체 속성을 덮어 쓰지 않는 간단한 mixin 함수입니다.

var mixin = function(addToJSON, someOtherJSON) {
  for(var key in someOtherJSON) {
     // don't overwrite 
     if(!moveJSON[key]) {
       moveJSON[key] = someOtherJSON[key]; 
     }
  }
};

var otherJSON = {'someOtherStuff': someOtherMoves[0].innerHTML};

mixin(moveJSON, otherJSON);

그것은 당신이 필요로하는 일을해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top