- ベストアンサー
配列からNULL以外のキーを取得する方法
- 配列からNULL以外のキーを取得する方法について説明します。
- 質問文章で使用されているコードを解説し、期待される結果と実際の結果の違いについて説明します。
- console.logの結果が[ 0: 1, 3: 3] ではない理由について解説します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 function test(data) { var result = []; for (var i = 0, j = 0; i < data.length; i ++ ) { if(data[i] !== null){ result[j] = j++; } } return result; } こうじゃないですか? iは配列分のインデックス値 jはnull以外のものがあった場合に加算されるインデックス値 iは0から始まって配列の分までがループ条件 jは0から始まって走査値がnullじゃなかったら加算されていく 1ループ i = 0,j = 0 data配列の0(iの値)を走査 → nullでないのでresult[0(jの値)]に0(jの値)をセット 2ループ i = 1,j = 1 data配列の1(iの値)を走査 → nullなのでスルー 3ループ i = 2; j = 1 data配列の2(iの値)を走査 → nullなのでスルー 4ループ i = 3; j = 1 data配列の3(iの値)を走査 → nullでないのでresult[1(jの値)]に1(jの値)をセット
その他の回答 (3)
- babu_baboo
- ベストアンサー率51% (268/525)
var data = ["1", null, null, "5"]; var ary = []; function isNotNull (a, i) { return a !== null ? (this.push (i), true): false; } alert ((data.filter (isNotNull, ary), ary)); // function isNotNull2 (a, b, c) { return b === null ? a: a.concat (c); } alert ( ["1", null, null, "5"].reduce (isNotNull2, [])); そもそも、Array.filter は、こういうつかいかたをするものでもはないのだが・・・ ちょっとしらべれればわかることを・・・ そろそろ・・・ Q&Aって、これからしらべるひとのためになる。 しつもんをとじていないと、良質なこたえがかかれていても、みのがすかのうせいがあるよ。 これからのひとが。
お礼
回答ありがとうございました。 大変参考になりました。 >しつもんをとじていないと とじましたー
- b0a0a
- ベストアンサー率49% (156/313)
>console.logだから? はい >もしそうなら、どうして[ 0: 1, 3: 3] ではないのでしょうか? それをいうなら[ 0: 0, 3: 3]ですよね? 仕様です 穴あきやプロパティを持った配列はこのように簡潔に分かりやすく表現されます
お礼
回答ありがとうございましたー
- babu_baboo
- ベストアンサー率51% (268/525)
function isNull (a) { return a !== null; } alert ( ["1", null, null, "5"].filter (isNull)); -- function isNull2 (a, b) { return b === null ? a: a.concat (b); } alert ( ["1", null, null, "5"].reduce (isNull2, []));
補足
回答ありがとうございます。 質問内容自体は1さんの回答で解決したのですが、参考までに教えてください。 ■filter ・filterメソッドでは、インデックス番号を取得することは出来ない、という理解で合ってるでしょうか? ・例えば、要素[1, 5]ではなくて、インデックス番号[0, 3]を取得することは出来ない? ■reduce ・isNull2で、nullではないインデックス番号[0, 3]を返すにはどう書けば良いでしょうか?
お礼
詳細な回答ありがとうございました。 >jはnull以外のものがあった場合に加算されるインデックス値 大変参考になりましたー 今回は[0, 3]が欲しかったので、 下記のようにしたところ、無事望む結果を得ることが出来ました。 if(data[i] !== null){ result[j] = i; j++ }