前提・実現したいこと
下記の配列で重複チェックを行い処理を行いたいのですが、
JavaScript
1let Records = [ 2 { 3 A: { type: "DROP_DOWN", value: null }, 4 B: { type: "NUMBER", value: "100" }, 5 C: { type: "DROP_DOWN", value: null }, 6 D: { type: "DROP_DOWN", value: "TEST1" }, 7 E: { type: "SINGLE_LINE_TEXT", value: "" }, 8 F: { type: "SINGLE_LINE_TEXT", value: "TEST2" }, 9 G: { type: "SINGLE_LINE_TEXT", value: "5" }, 10 H: { type: "DATE", value: "2019-09-01" }, 11 I: { type: "DROP_DOWN", value: "TEST3" }, 12 J: { type: "NUMBER", value: "10000" }, 13 K: { type: "SINGLE_LINE_TEXT", value: "001" } 14 }, 15 { 16 A: { type: "DROP_DOWN", value: null }, 17 B: { type: "NUMBER", value: "10000" }, 18 C: { type: "DROP_DOWN", value: null }, 19 D: { type: "DROP_DOWN", value: "TEST4" }, 20 E: { type: "SINGLE_LINE_TEXT", value: "" }, 21 F: { type: "SINGLE_LINE_TEXT", value: "TEST5" }, 22 G: { type: "SINGLE_LINE_TEXT", value: "5" }, 23 H: { type: "DATE", value: "2019-09-01" }, 24 I: { type: "DROP_DOWN", value: "TEST6" }, 25 J: { type: "NUMBER", value: "10000" }, 26 K: { type: "SINGLE_LINE_TEXT", value: "002" } 27 }, 28 { 29 A: { type: "DROP_DOWN", value: null }, 30 B: { type: "NUMBER", value: "1000" }, 31 C: { type: "DROP_DOWN", value: null }, 32 D: { type: "DROP_DOWN", value: "TEST7" }, 33 E: { type: "SINGLE_LINE_TEXT", value: "" }, 34 F: { type: "SINGLE_LINE_TEXT", value: "TEST8" }, 35 G: { type: "SINGLE_LINE_TEXT", value: "5" }, 36 H: { type: "DATE", value: "2019-09-01" }, 37 I: { type: "DROP_DOWN", value: "TEST9" }, 38 J: { type: "NUMBER", value: "10000" }, 39 K: { type: "SINGLE_LINE_TEXT", value: "001" } 40 } 41];
①重複しているものを除いて抽出(Kのvalue値で重複チェックする)
②その後、重複したものは①のLを追加し配列に格納していく
といった方法をとりたく、最終的には下記の実現を望んでいます。
JavaScript
1let Records = [ 2 { 3 A: { type: "DROP_DOWN", value: null }, 4 B: { type: "NUMBER", value: "100" }, 5 C: { type: "DROP_DOWN", value: null }, 6 D: { type: "DROP_DOWN", value: "TEST1" }, 7 E: { type: "SINGLE_LINE_TEXT", value: "" }, 8 F: { type: "SINGLE_LINE_TEXT", value: "TEST2" }, 9 G: { type: "SINGLE_LINE_TEXT", value: "5" }, 10 H: { type: "DATE", value: "2019-09-03" }, 11 I: { type: "DROP_DOWN", value: "TEST3" }, 12 J: { type: "NUMBER", value: "10000" }, 13 K: { type: "SINGLE_LINE_TEXT", value: "001" }, 14 //追加部分 15 L: [{ 16 A: { type: "DROP_DOWN", value: null }, 17 B: { type: "NUMBER", value: "1000" }, 18 C: { type: "DROP_DOWN", value: null }, 19 D: { type: "DROP_DOWN", value: "TEST7" }, 20 E: { type: "SINGLE_LINE_TEXT", value: "" }, 21 F: { type: "SINGLE_LINE_TEXT", value: "TEST8" }, 22 G: { type: "SINGLE_LINE_TEXT", value: "5" }, 23 H: { type: "DATE", value: "2019-09-03" }, 24 I: { type: "DROP_DOWN", value: "TEST9" }, 25 J: { type: "NUMBER", value: "10000" }, 26 K: { type: "SINGLE_LINE_TEXT", value: "001" } 27 }] 28 }, 29 { 30 A: { type: "DROP_DOWN", value: null }, 31 B: { type: "NUMBER", value: "10000" }, 32 C: { type: "DROP_DOWN", value: null }, 33 D: { type: "DROP_DOWN", value: "TEST4" }, 34 E: { type: "SINGLE_LINE_TEXT", value: "" }, 35 F: { type: "SINGLE_LINE_TEXT", value: "TEST5" }, 36 G: { type: "SINGLE_LINE_TEXT", value: "5" }, 37 H: { type: "DATE", value: "2019-09-03" }, 38 I: { type: "DROP_DOWN", value: "TEST6" }, 39 J: { type: "NUMBER", value: "10000" }, 40 K: { type: "SINGLE_LINE_TEXT", value: "002" }, 41 } 42];
試したこと
JavaScript
1let results = Records.reduce((res, cur) => { 2 for (let i = 0, s = res.length, name = cur.K.value, object; i < s; ++i) { 3 object = res[i]; 4 if (object.K.value === name) {return res;} 5 } 6 res.push(cur); 7 return res; 8}, []);
これで、上記の①の部分は出来ていると思うのですが②の部分をどの様にしていけば良いか悩んでいます。ご教授頂けましたら幸いです。
重複のチェックはKだけでOKですね?
常に0番目の要素と1番目以降の要素を比較するんでしょうか?
たとえば0番目の要素にマッチしなかったとして
1番目と2番目の要素を比較する必要はない?
ご返信ありがとうございます。
```重複のチェックはKだけでOKですね?```
はい。Kだけを参照して重複の判断をします。
```常に0番目の要素と1番目以降の要素を比較するんでしょうか?常に0番目の要素と1番目以降の要素を比較するんでしょうか?たとえば0番目の要素にマッチしなかったとして1番目と2番目の要素を比較する必要はない?```
1番目と2番目の要素を比較する必要ございます。
補足願います。
{
A: { type: "DROP_DOWN", value: null },
B: { type: "NUMBER", value: "100" },
...
L: [{
A: { type: "DROP_DOWN", value: null },
B: { type: "NUMBER", value: "1000" },
...
}]
},
↑これは、↓これでもいいのですか?
{
A: { type: "DROP_DOWN", value: null },
B: { type: "NUMBER", value: "1000" },
...
L: [{
A: { type: "DROP_DOWN", value: null },
B: { type: "NUMBER", value: "100" },
...
}]
},
つまり、Lを増やすオブジェクトと、増やしたLに入れるオブジェクトとは、ご提示の手順ですと区別がつかないようですが、それらの関係は任意で構いませんか?
処理の一部に外部のライブラリを使うことは、回答としてアリでしょうか?
先の当方からのご質問、
> 処理の一部に外部のライブラリを使うことは、回答としてアリでしょうか?
にまだご返答頂いておりませんが、Lodash の groupBy を使うとRecordsから最終的に欲しいresuls を得るコードを手短かに書けるので、参考までに、これを使ったコード例もあわせて回答しました。
回答3件
あなたの回答
tips
プレビュー