2017-12-12 9 views
0

これは、配列の一例である真のサブアレイのすべてのインデックスを取得私が持つことができます。、すべての要素が

let testArray = [ 
    [true, true, false], 
    [false, true, false], 
    [true, true, true], 
    [false, true, false], 
    [true, true, true] 
] 

はどのように確認することができれば、サブアレイ内のすべての値trueであり、チェックをパスするサブアレイのすべてのインデックスを取得しますか?

+0

? –

+0

私は** every **メソッドを使用しようとしましたが、インデックスの使用方法はわかりません。このメソッドが私に必要な結果を提供しているかどうかはわかりません。 – Sasha

+0

"要素のインデックスを取得する"どの要素を意味していますか? –

答えて

3

使用map、別mapを得るために、すべての要素がtrueである場合のみを選択するindexとすべてのサブ配列要素は、(コールバックとしてeveryBoolean有する)trueであるかどうかを示すブールを保持するオブジェクト、filterを作成しますインデックスのみ。

let testArray = [ 
 
    [true, true, false], 
 
    [false, true, false], 
 
    [true, true, true], 
 
    [false, true, false], 
 
    [true, true, true] 
 
]; 
 
console.log(testArray 
 
    .map((subArray, index) => ({ 
 
    index, 
 
    allTrue: subArray.every(Boolean) 
 
    })) 
 
    .filter((entry) => entry.allTrue) 
 
    .map((entry) => entry.index));

+1

'b => b'も動作します.. –

+0

これは部分的に動作しています - 関数は最初の一致だけを記録し、私はすべてインデックスします。 – Sasha

+0

@ JonasW。確かに、これは 'findIndex'の繰り返しごとに新しい関数を作成します。既存の関数をそこに配置する方がよりエレガントです。 – Xufox

1

あなたは、内側の配列をチェックすることにより、外側の配列を軽減し、インデックスまたは何を取ることができます。あなたがこれまでに試してみました何

var array = [[true, true, false], [false, true, false], [true, true, true], [false, true, false]], 
 
    allTrue = array.reduce((r, a, i) => r.concat(a.every(Boolean) ? i : []), []); 
 

 
console.log(allTrue);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

これはOPが探しているものではありません。あなたはその質問を誤解しました。 –

+0

@Héctor、私はそれを得たと思う。 –

関連する問題