回答編集履歴
3
objがundefinedで動かなかったので修正
test
CHANGED
@@ -196,9 +196,9 @@
|
|
196
196
|
|
197
197
|
for (let it of array) {
|
198
198
|
|
199
|
-
if (it.rev > ((
|
199
|
+
if (it.rev > ((result[it.id] || {}).rev || 0)) {
|
200
|
-
|
200
|
+
|
201
|
-
|
201
|
+
result[it.id] = it;
|
202
202
|
|
203
203
|
}
|
204
204
|
|
2
やっぱり破壊的処理の場合はreduce不要だった
test
CHANGED
@@ -190,13 +190,21 @@
|
|
190
190
|
|
191
191
|
const result = {};
|
192
192
|
|
193
|
+
// for...ofかforEachかは正直好み
|
194
|
+
|
193
|
-
|
195
|
+
for (let array of arrayList) {
|
196
|
+
|
194
|
-
|
197
|
+
for (let it of array) {
|
198
|
+
|
195
|
-
if (it.rev > ((obj[it.id] || {}).rev || 0))
|
199
|
+
if (it.rev > ((obj[it.id] || {}).rev || 0)) {
|
196
|
-
|
200
|
+
|
197
|
-
|
201
|
+
obj[it.id] = it;
|
198
|
-
|
202
|
+
|
199
|
-
}
|
203
|
+
}
|
204
|
+
|
205
|
+
}
|
206
|
+
|
207
|
+
}
|
200
208
|
|
201
209
|
return Object.values(result);
|
202
210
|
|
1
Keyさんを見ながらひらめいたコード追記
test
CHANGED
@@ -169,3 +169,57 @@
|
|
169
169
|
// 3: {id: "c1", rev: 2, val: 30}
|
170
170
|
|
171
171
|
```
|
172
|
+
|
173
|
+
|
174
|
+
|
175
|
+
---
|
176
|
+
|
177
|
+
|
178
|
+
|
179
|
+
keiさんのコードをヒントにいじったのがこちら
|
180
|
+
|
181
|
+
スマートになりつつの速度確保もそれなりに良い感じに仕上がってると思います。
|
182
|
+
|
183
|
+
|
184
|
+
|
185
|
+
```JavaScript
|
186
|
+
|
187
|
+
// 別に2個の配列の引数に限定せず、3個でも4個でも受け付けるようになったけどいいよね?
|
188
|
+
|
189
|
+
const mergeArrayBasedIDByRevision = (...arrayList) => {
|
190
|
+
|
191
|
+
const result = {};
|
192
|
+
|
193
|
+
arrayList.forEach(array => array.reduce((obj, it) => {
|
194
|
+
|
195
|
+
if (it.rev > ((obj[it.id] || {}).rev || 0)) obj[it.id] = it;
|
196
|
+
|
197
|
+
return obj;
|
198
|
+
|
199
|
+
}, result));
|
200
|
+
|
201
|
+
return Object.values(result);
|
202
|
+
|
203
|
+
}
|
204
|
+
|
205
|
+
|
206
|
+
|
207
|
+
const ar1 = [{id:'a1', rev:1, val:10}, {id:'a2', rev:2, val:15}, {id:'b1', rev:1, val:20}]
|
208
|
+
|
209
|
+
const ar2 = [{id:'a1', rev:2, val:11}, {id:'a2', rev:1, val:12}, {id:'c1', rev:2, val:30}]
|
210
|
+
|
211
|
+
|
212
|
+
|
213
|
+
console.log(mergeArrayBasedIDByRevision(ar1, ar2));
|
214
|
+
|
215
|
+
// (4) [{…}, {…}, {…}, {…}]
|
216
|
+
|
217
|
+
// 0: {id: "a1", rev: 2, val: 11}
|
218
|
+
|
219
|
+
// 1: {id: "a2", rev: 2, val: 15}
|
220
|
+
|
221
|
+
// 2: {id: "b1", rev: 1, val: 20}
|
222
|
+
|
223
|
+
// 3: {id: "c1", rev: 2, val: 30}
|
224
|
+
|
225
|
+
```
|