Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
合并JavaScript对象_Javascript_String Concatenation - Fatal编程技术网

合并JavaScript对象

合并JavaScript对象,javascript,string-concatenation,Javascript,String Concatenation,我读过另一篇文章,但这个问题没有明确的答案 我得到了一些如下所示的JavaScript对象: var moveJSON = { 'name' : move[0].innerHTML, 'info' : move[1].innerHTML, 'power' : move[2].innerHTML, 'accuracy' : move[3].innerHTML, 'type' : move[4].innerHTML,

我读过另一篇文章,但这个问题没有明确的答案

我得到了一些如下所示的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中的函数中,该函数在创建合并对象时可能很有用


如果您有多个JSON对象,您可以创建一个包含JSON的对象:

var containerJSON = {};
并将该对象用作数组:

containerJSON[0] = moveJSON_1;
containerJSON[1] = moveJSON_2;
然后在PHP中,您可以使用json_decode()返回数据。

“合并”对象不同于将对象放入数组,数组是一种聚合。尽管它为您提供了一个要传递的单个对象,但此聚合在结构上与合并对象不同。聚合在访问新容器(数组)中的值时增加了深度级别。这与合并不同,合并会产生相同的容器,即对象

如果您使用的是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 aggregation = [{a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]}];

这是一个简单的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);

这应该可以满足您的需要。

在这种情况下,数组更合适。当您将数据作为数组发送到php时,需要分别解码每个JSON对象。因此,最好将它们放入JSON“container”对象中。这个问题类似于:?您应该检查您的函数,
addToJSON
未使用。此外,如果值的计算结果为
false
0
,则可能会覆盖这些值。相反,你应该使用
if(typeof moveJSON[key]!=“undefined”){
这是一个对象的集合或聚合,而不是合并。他在文章末尾提到了一个数组。哦,我明白他现在说的了。这仍然不是一个合并。
var aggregation = [{a:1}, {b:2, c:3, d: {a: 1}}, {a: 4, c:[1,2,3]}];
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);