実現したいこと
以下の2つの2次元配列があります。
ary01の1列目と2列をキーに、
ary02の1列目と2列目が同じ値で、かつヒットした行データの3列目の値が0より
大きい3列目の数値をary01の5列目に追加したいです。
最初、ary01の300個の数分、ary02の2000個分の中でループして見つかったものをary01に
代入しましたが、3分待たないと結果が返ってこなかったので、パフォーマンス向上を考え、
2つの配列の差分を取得するほうが処理的に早いかなと思っていますが、いかがでしょうか。
前提
ary01のキー内容(1列目、2列目)は必ずしもary02に存在するとは限らないです。
コード
javascript
1 const ary01 = [ 2 ["BF000351", "A001-001", "1", "AAA"], 3 ["A", "Alice", "3", "BBB"], 4 ["A", "Chris", "4", "CCC"], 5 ["B", "Chris", "5", "DDD"], 6 ["B", "Chris", "6", "EEE"], 7 ["C", "Davis", "7", "FFF"] 8 ]; 9 const ary02 = [ 10 ["AA", "Bill", "1", "AAA"], 11 ["BF000351", "A001-001", 1200, "AAA"], 12 ["B", "Chris", "6", "EEE"], 13 ["B", "Chris", 6, "EEE"], 14 ["B", "Chris", 0, "EEE"], 15 ["AB", "Alice", "3", "BBB"], 16 ["AC", "Chris", "4", "CCC"], 17 ["C", "Davis", "7", "FFF"] 18 ]; 19 20 // const output = ary01.filter((value) => ary02.some(ary => ary.every((a, i) => a === value[i]))); 21 const unique_A = ary01.filter(function(e, index){ 22 return !ary01.some(function(e2, index2){ 23 console.log("e[0] = " + e[0] + "; e2[0] = " + e2[0]); 24 return index > index2 && e[0] == e2[0] && e[1] == e2[1]; 25 }); 26 }); 27 console.log(unique_A);
実行結果
[ [ 'BF000351', 'A001-001', '1', 'AAA' ],
[ 'A', 'Alice', '3', 'BBB' ], ←このデータがあってはいけないですが。。。
[ 'A', 'Chris', '4', 'CCC' ], ←このデータがあってはいけないですが。。。
[ 'B', 'Chris', '5', 'DDD' ],
[ 'C', 'Davis', '7', 'FFF' ] ]
疑問点
ary01のAとary02のABは一致してないから実行結果にあってはいけないはずなのに、
なんでヒットして出てきたのでしょうか。

回答2件
あなたの回答
tips
プレビュー