###前提・実現したいこと
以下array
がありまして、「指定キーが空でないもの」で配列を再編したいです。
js
1var array = [ 2 { id:1, 'a':'a_1', 'b':'b_1' ,'c':'' }, 3 { id:2, 'a':'a_2', 'b':'' ,'c':'c_2' }, 4 { id:3, 'a':'' , 'b':'' ,'c':'c_3' }, 5 { id:4, 'a':'a_4', 'b':'b_4' ,'c':'' }, 6];
たとえばb
を指定したら「b
が空でないもの」という条件で再編し、次のresult
が目的となります。
js
1var result = [ 2 { id:1, 'a':'a_1', 'b':'b_1' ,'c':'' }, 3 { id:4, 'a':'a_4', 'b':'b_4' ,'c':'' }, 4]; 5
###発生している問題
b
と指定しても、それ以外をundefined
で取得してしまいます。
###該当のソースコード
これが問題の発生するソースコードで、結果はコメントアウトしてあるようにb
以外がundefined
が取得されるという状況です。
js
1var result = extArrayByName( array, 'b' ); 2console.log(result); 3 4function extArrayByName( array, name ){ 5 var result = array.map(function(x){ 6 if(x[name] != ''){ 7 return x; 8 } 9 }); 10 return result; 11} 12 13/* 14このような結果になってしまうのが問題です。 15[ 16 { id:1, 'a':'a_1', 'b':'b_1' ,'c':'' }, 17 undefined, 18 undefined, 19 { id:4, 'a':'a_4', 'b':'b_4' ,'c':'' }, 20]; 21*/ 22
###試したこと
まず.map()
の戻り値を値を確認し、正しくarray
の中にあるオブジェクトであることを確認しました。
js
1function extArrayByName( array, name ){ 2 var result = array.map(function(x){ 3 console.log(x); // arrayの中にあるオブジェクトであることを確認 4 }); 5}
続いてこのオブジェクトから「指定キー」で値を取得できることを確認しました。
js
1var x = { id:4, 'a':'a_4', 'b':'b_4' ,'c':'' }; 2var test = x['b']; 3console.log(test); // b_4が取得できることを確認
ここでわからないのは、正しくオブジェクトが取得され、そのオブジェクトに対して「指定キー」で値を取得できるという2つの確認が済んだにも関わらず、それを組み合わせた「該当のソースコード」で問題が発生するということです。
ここまできてお手上げになってしまいまして、ご助力を乞うた次第です。
どうぞ宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/18 21:26
2019/12/18 21:28
2019/12/18 21:31