JavaScript - 将两个数组对象合并为一个arr对象,然后遍历每个索引/对象

时间:2014-12-18 15:37:35

标签: javascript arrays

var arrObj1 = [{a:1},{b:2}, {c:3}]

var arrObj2 = [{operator: LESS THAN}, {operator:GREATER THAN}, {operator:"NOT EQUAL"}]

所以我想把arrObj2 [0]的obj合并到arrObj1 [0]的obj,arrObj2 [1]合并到arrObj1 [1]的obj等等......

//resultArrObj = [{a:1, operator: LESS THAN}, {b:2, operator:"GREATER THAN}];

在(或合并之后)我需要遍历每个对象并返回一个新的obj,它将具有属性(字段,输入,运算符)并推入数组。

field = key from arrObj1 (a, b, c)
input = value from arrObj1(1,2,3)
operator = "operator" from arrObj 2. 

// var endResult = [{field:a, input:1, operator: LESS THAN}, {field:b, input:2, operator:GREATER THAN}];

谢谢!

2 个答案:

答案 0 :(得分:1)

让我们将这个问题分解为两个步骤: 1)合并对象 2)处理对象

我们可以编写一个通用的合并函数:

if (!Object.prototype.extend) {

      Object.prototype.extend = function (object) {

        for (key in object) {

          if (typeof object[key] === 'object' && 
              typeof this[key]   === 'object' && 
              this.hasOwnProperty(key)) {

            this[key].extend(object[key]);      

          } else {      
            this[key] = object[key];      
          }

        }    

        return this;  
      };
};

上面的代码创建了一个所有对象共享的方法。它的工作原理如下:

var obj1 = { 'a': 7 },
    obj2 = { 'b': 2 };

obj1.extend(obj2);

console.log(obj1); // { 'a': 7, 'b': 2 };

我通常不会像使用.extend方法那样修改对象,但构建具有相同功能但具有不同API的东西应该是微不足道的。 (例如,函数extend(obj1,obj2){do stuff ..并返回扩展对象}

反正。这应该解决关于合并对象的第一部分。

第二部分,处理这个合并对象,只是使用一个遍历合并对象的for循环,并将新对象推送到一个数组中。它看起来像这样:

for (var prop in mergedObject) {
  var tempObject = {};
  if (prop === 'operator') {
    tempObject.operator = mergedObject.operator;
  } else {
    tempObject.field = prop;
    tempObject.input = tempObject[prop];
  }
  endResult.push(tempObject);
}

希望这可以帮到你。

答案 1 :(得分:1)

我相信这可以满足您的需求。它假定您知道您的数据并且不进行任何错误检查,但只是按照您提出的方式将它们组合在一起。

var arrObj1 = [{a:1},{b:2}, {c:3}];

var arrObj2 = [{operator: "LESS THAN"}, {operator:"GREATER THAN"}, {operator:"NOT EQUAL"}];

var endResult = [];
var counter = 0;
var objNew = {};

arrObj1.forEach(function(fieldInput){
    for ( field in fieldInput ){
        objNew.field=field;
        objNew.input=fieldInput[field];
        objNew.operator=arrObj2[counter]['operator'];
        counter++;
        endResult.push(objNew);
        objNew={};
    };
})

// var endResult = [{field:a, input:1, operator: LESS THAN}, {field:b, input:2, operator:GREATER THAN}, {field:c, input:3, operator:NOT EQUAL}]