我已经阅读另一个 类似的问题上这样 但没有一个明确的答案在这个问题。

我得到了一些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
}

我需要把它们合并成一个目的,那将被发送到PHP通过阿贾克斯。但是,首先:什么是最佳的方式将它们合并成一个单一的对象(array)?

有帮助吗?

解决方案

此应该工作。

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

其他提示

"合并"的对象是不同于放对象为一系列,这是一个聚集。虽然它提供了一个单一的对象来绕过这聚集在结构上是不同的,比合并的对象。添加了聚集一级的深入访问时值新的容器,这是一个阵列。这是不同于合并其结果在同一容器,一个对象。

如果你使用的道场,于你可以做到:

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(),让您的数据备份。

这是不会覆盖现有对象属性的简单混入功能

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