关于哈希:合并Javascript对象

Merge Javascript object

本问题已经有最佳答案,请猛点这里访问。

我有一个未知的键名和object1,需要与其他object2合并。安全点是对象2中不存在未知密钥,因此永远不会出现密钥名冲突。

1
2
3
4
5
6
7
8
9
10
var object1 = {
 id: 1,
 name:"myname",
 boleanSample : true
}


var object2 = {
 unknownKeyName :"UnknownValue"
}

我想把object2合并到object1中并得到这个

1
2
3
4
5
6
var object1 = {
 id: 1,
 name:"myname",
 boleanSample : true,
 unknownKeyName ="UnknownValue"
}

拜托,只有普通的javascript。如果响应要求创建一个新的对象3是完全正确的:)

我在发布问题之前检查了这些链接:

  • 合并javascript对象(使用数组…)
  • 合并javascript对象(仅用于已知的键,对于本例不有用)
  • 在属性上合并javascript对象(错误的post,没有意义)

对那些人一点也不重复:)


Use Object.keys with Array#forEach

1
2
3
4
5
6
7
8
9
10
11
12
13
var object1 = {
  id: 1,
  name:"myname",
  boleanSample: true,
};

var object2 = {
  unknownKeyName:"UnknownValue" //correct typo here
};
Object.keys(object2).forEach(function(key) {
  object1[key] = object2[key];
});
console.log(object1);


Step I: loop over the properties.

Step II: try and check if object

Step III: if true, stimulate function on obj[prop] and check, else
just take check.

Step IV: if there was an error obj[prop] = check;

Step V: return obj

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/*functions*/
function objectConcat(o1, o2) {
  for (var v in o2) {
    try {
      o1[v] = (o2[v].constructor == Object) ? objectConcat(o1[v], o2[v]) : o2[v];
    } catch (e) {
      o1[v] = o2[v];
    }
  }
  return o1;
}

/*objects*/
var object1 = {
  id: 1,
  name:"myname",
  boleanSample: true,
}

var object2 = {
  unknownKeyName:"UnknownValue" /*mistake straighten*/
}

/*code*/

console.log(objectConcat(object2, object1));


这个合并函数应该这样做。只需记住先添加要附加两个的对象。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
var object1 = {
 id: 1,
 name:"myname",
 boleanSample : true
}


var object2 = {
 unknownKeyName :"UnknownValue"
}

function mergeObjects(a,b){
  for(var bi in b) {
    if(b.hasOwnProperty(bi)) {
      if(typeof a[bi] ==="undefined") {
        a[bi] = b[bi];
      }
    }
  }
}
mergeObjects(object1,object2);
console.log(object1);