###実現したいこと
下記targets
のうちoks
を含むかどうかで区別して、目的であるr
を作りたいです。
a1,a2
とb1,b2
はoks
を含むためそれぞれのキーの配列に入れて、
c1,c2
はoks
を含まないためerrors
に入れる、というのが目的のr
になります。
js
1var targets = ['a1','a2','b1','b2','c1','c2']; 2var oks = ['a','b']; 3 4// 目的 5r = [ 6 a: ['a1','a2'], 7 b: ['b1','b2'], 8 errors: ['c1','c2'] 9];
###発生している問題
後の値しか配列に入りません。
下記のソースコードですが、OKな方はa2
やb2
しか入らず、エラーの方はc2
しか入らないということが問題です。
前の値a1
やb1
やc1
も入れたいのですが、どのようにすべきでしょうか。
###該当のソースコード
.match
を使いoks
を含むかどうかを区別しているのですが、うまくいっていないみたいです。
js
1var targets = ['a1','a2','b1','b2','c1','c2']; 2var oks = ['a','b']; 3 4let r = []; 5 6targets.forEach( target => { 7 8 oks.forEach( ok => { 9 10 if ( target.match(ok) ) { 11 r[ok] = []; 12 r[ok].push( target ); 13 }else{ 14 r['errors'] = []; 15 r['errors'].push( target ); 16 } 17 18 }); 19 20}); 21 22console.log( r );
##試したこと
含むかどうかの検証方法として.match
でなく.indexOf
を用いましたができませんでした。
js
1 //if ( target.match(ok) ) { 2 if ( target.indexOf(ok) != -1) { 3 r[ok] = []; 4 r[ok].push( target ); 5 }else{ 6 r['errors'] = []; 7 r['errors'].push( target ); 8 }
以上のように区別の方法を変えても同じ結果であることから、ループに原因があるのではないかと思慮しています。
ですが、初期化して.push
する、という流れの何がいけないのかがわからず、ここに質問させて頂きました。
解決策についてアドバイス願えましたら幸いです。
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/31 08:58
2019/12/31 09:33
2019/12/31 11:26
2019/12/31 11:26
2019/12/31 11:28