1. ホーム
  2. javascript

配列マップを使ったif条件付きフィルタリング

2023-08-09 18:44:35

質問

私は、保存のためにサーバーに送信する準備をするために、オブジェクトをもう少しフィルタリングするために、配列マップを使用しようとしています。私は1つのキー値にフィルタリングすることができ、それは素晴らしいですが、私はそれをさらに1つのステップに進め、内部のブールに対してそれらをチェックしたいです。

というわけで、今私が持っているのはこんな感じです。

$scope.appIds = $scope.applicationsHere.map( function(obj){
        if(obj.selected == true){
            return obj.id;
        }
    });

これはidを取り出すには素晴らしい機能ですが、selectedの値が==falseの場合はこの新しい配列に入れたくないので、さらにフィルタリングするために条件を付けました。しかし、.selected==falseのidはまだ配列に残っていて、その値はnullになっています。つまり、オブジェクトに4つの項目があり、そのうちの2つがfalseの場合、次のようになります。

 appIds = {id1, id2, null, null};

私の質問は - ヌルがそこに置かれることなく、これを行う方法はありますか?読んでくださってありがとうございます。

どのように解決するのですか?

あなたが探しているのは .filter() 関数を探しています。

  $scope.appIds = $scope.applicationsHere.filter(function(obj) {
    return obj.selected;
  });

これは、オブジェクトを含む配列で、そのプロパティが true (またはtruthy)であるオブジェクトのみを含む配列を生成します。

編集 そうですね、jAndyさんがコメントで指摘されているように、フィルタリングしてquot;id"の値だけを抜き出すのは、そうでしょう。

  $scope.appIds = $scope.applicationsHere.filter(function(obj) {
    return obj.selected;
  }).map(function(obj) { return obj.id; });

いくつかの関数ライブラリ(例えば 機能的な のように、私の意見では十分な愛情を受けていないもの) には .pluck() 関数がありますが、ネイティブの JavaScript はそのようなツールのかなり少ないセットを持っています。