回答編集履歴
1
Object\.assign\.apply 版コードを追加し、可変長引数にしました
answer
CHANGED
@@ -11,22 +11,52 @@
|
|
11
11
|
return this[key];
|
12
12
|
}));
|
13
13
|
|
14
|
-
var
|
14
|
+
var mergeObjects1 = (function (assign, getObjectValues) {
|
15
|
-
|
15
|
+
function reducefn (previous, current) {
|
16
|
-
return
|
16
|
+
return assign(previous, current);
|
17
17
|
}
|
18
|
-
}(function reducefn (previous, current) {
|
19
|
-
return Object.assign(previous, current);
|
20
|
-
}));
|
21
18
|
|
19
|
+
return function mergeObjects1 (target) {
|
20
|
+
var array = [],
|
21
|
+
i = 0,
|
22
|
+
l = arguments.length;
|
23
|
+
|
24
|
+
while (i < l) {
|
25
|
+
array = array.concat(getObjectValues(arguments[i++]));
|
26
|
+
}
|
27
|
+
|
28
|
+
return array.reduce(reducefn);
|
29
|
+
}
|
30
|
+
}(Object.assign, getObjectValues));
|
31
|
+
|
32
|
+
var mergeObjects2 = (function (assign, getObjectValues) {
|
33
|
+
return function mergeObjects2 (target) {
|
34
|
+
var array = [],
|
35
|
+
i = 0,
|
36
|
+
l = arguments.length;
|
37
|
+
|
38
|
+
while (i < l) {
|
39
|
+
array = array.concat(getObjectValues(arguments[i++]));
|
40
|
+
}
|
41
|
+
|
42
|
+
return assign.apply(null, array);
|
43
|
+
};
|
44
|
+
}(Object.assign, getObjectValues));
|
45
|
+
|
22
46
|
var a = {model_name: {id : 1 , name : 'なまえ'}, model_name2: {address: 'tokyo'}};
|
23
47
|
var b = {model_name: {id : 2 , tel : 11111}, model_name2: {zip: 5555}};
|
24
48
|
|
25
|
-
console.log(JSON.stringify(
|
49
|
+
console.log(JSON.stringify(mergeObjects1(a, b))); // {"id":2,"name":"なまえ","address":"tokyo","tel":11111,"zip":5555}
|
50
|
+
console.log(JSON.stringify(mergeObjects2(a, b))); // {"id":2,"name":"なまえ","address":"tokyo","tel":11111,"zip":5555}
|
26
51
|
```
|
27
52
|
|
28
53
|
- [Object.values() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values)
|
29
54
|
- [Object.assign() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
|
30
55
|
- [Array.prototype.reduce() - JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce)
|
31
56
|
|
57
|
+
---
|
58
|
+
**(2015/12/05 23:48追記)**
|
59
|
+
|
60
|
+
Object.assign.apply 版コードを追加し、可変長引数にしました。
|
61
|
+
|
32
62
|
Re: Natade_Gorilla さん
|