• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列からNULL以外のキーを取得したいのですが……)

配列からNULL以外のキーを取得する方法

このQ&Aのポイント
  • 配列からNULL以外のキーを取得する方法について説明します。
  • 質問文章で使用されているコードを解説し、期待される結果と実際の結果の違いについて説明します。
  • console.logの結果が[ 0: 1, 3: 3] ではない理由について解説します。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 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の値)をセット

re97
質問者

お礼

詳細な回答ありがとうございました。 >jはnull以外のものがあった場合に加算されるインデックス値 大変参考になりましたー 今回は[0, 3]が欲しかったので、 下記のようにしたところ、無事望む結果を得ることが出来ました。 if(data[i] !== null){ result[j] = i; j++ }

その他の回答 (3)

回答No.4

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って、これからしらべるひとのためになる。 しつもんをとじていないと、良質なこたえがかかれていても、みのがすかのうせいがあるよ。 これからのひとが。

re97
質問者

お礼

回答ありがとうございました。 大変参考になりました。 >しつもんをとじていないと とじましたー

  • b0a0a
  • ベストアンサー率49% (156/313)
回答No.3

>console.logだから? はい >もしそうなら、どうして[ 0: 1, 3: 3] ではないのでしょうか? それをいうなら[ 0: 0, 3: 3]ですよね? 仕様です 穴あきやプロパティを持った配列はこのように簡潔に分かりやすく表現されます

re97
質問者

お礼

回答ありがとうございましたー

回答No.2

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, []));

re97
質問者

補足

回答ありがとうございます。 質問内容自体は1さんの回答で解決したのですが、参考までに教えてください。 ■filter ・filterメソッドでは、インデックス番号を取得することは出来ない、という理解で合ってるでしょうか? ・例えば、要素[1, 5]ではなくて、インデックス番号[0, 3]を取得することは出来ない? ■reduce ・isNull2で、nullではないインデックス番号[0, 3]を返すにはどう書けば良いでしょうか?