在JavaScript中部分复制对象数组的最优雅方式是什么?

时间:2015-04-04 06:07:10

标签: javascript jquery arrays

我有两个对象数组。 arrayOne包含项目类型myObject1

var myObject1 = {
  Id: 1, //key
  params: { weight: 52, price: 100 },
  name: "",
  role: ""
};

arrayTwo包含myObject2的项目类型:

var myObject2 = {
      Id: 1, //key
      name: "real name",
      role: "real role"
    };

我想将所有namesrolesarrayTwo复制到arrayOneid是关键,两个数组都包含myObjects,其中包含'id`。

2 个答案:

答案 0 :(得分:2)

如果保证两个数组是一致的,那么使用jQuery.extend(),代码是微不足道的:

$.each(arrayOne, function(i, obj) {
    $.extend(obj, arrayTwo[i]);
});

答案 1 :(得分:1)

以线性时间运行的解决方案。

var arrayOne; 	// Array containing objects of type myObject1
var arrayTwo; 	// Array containing objects of type myObject2
var tempObj = {};

// Transform arrayOne to help achieve a better performing code
arrayOne.forEach(function(obj){
	tempObj[obj.id] = obj;
});

// Runs on linear time O(arrayTwo.length)
arrayTwo.forEach(function(obj){
	// Note, since I'm not adding any thing to the arrayTwo
	// I can modify it in this scope
	var match = tempObj[obj.id];
	
	if(match){
		// If a match is found
		obj.name = match.name;
		obj.role = match.role;
	}
});