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}];
谢谢!
答案 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}]