90787


以下のような配列があります。

[code]

    const a = ["", ""]
    const b = ["aa", "aa"]
    const c = ["aa", ""]
    const d = ["", "aa"]
    
[/code]

配列内の要素が全て空文字ではないことを調べるために、以下のような処理をしているのですが

[code]

    a.every(e=>e) // false
    b.every(e=>e) // true
    c.every(e=>e) // false
    d.every(e=>e) // false
    
[/code]

もう少し良い書き方はある気がしています。他に良い書き方はあるでしょうか？


CC BY-SA 4.0
2022-08-27T05:18:49.367
90785
2023-07-03T01:45:47.370
2022-08-27T05:31:19.407
50855
50855
question
javascript
配列内の要素が全て空でないかを見たい


例えば、[`includes`](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/includes)を使うのはいかがでしょうか。

[code]

    const a = ["", ""];
    const b = ["aa", "aa"];
    const c = ["aa", ""];
    const d = ["", "aa"];
    
    const ar = [a, b, c, d];
    const res = ar.map(e => !e.includes(""));
    console.log(res) // [ false, true, false, false ]
[/code]


CC BY-SA 4.0
2022-08-27T06:03:04.810
90787
2022-08-27T06:03:04.810
19460
90785
answer


空文字以外にnullやundefinedをどう判定するのか等にもよると思いますが、ロジックとして今より良い書き方というのは特に無いような気がします。

どちらかというと、「全部空文字じゃないことをチェックしている」ことを直感的に判断しがたい点が問題のような気がしますので、そういった関数を明示的に定義してあげた方がベターな気はします。

またプロジェクト内でよく使用されるのであれば、prototypeに生やすという手も無くはないかなと思います（乱用はお勧めしませんが）  
粗いですが、コードサンプルです。

[code]

    const a = ["", ""]
    const b = ["aa", "aa"]
    const c = ["aa", ""]
    const d = ["", "aa"]
    
    const isAllPresent = (arr) => {
      return arr.every(e=>e);
    }
    console.log('普通の関数')
    console.log(isAllPresent(a))
    console.log(isAllPresent(b))
    console.log(isAllPresent(c))
    console.log(isAllPresent(d))
    
    Array.prototype.isAllPresent = function() {
      return isAllPresent(this);
    }
    console.log('prototypeメソッド')
    console.log(a.isAllPresent())
    console.log(b.isAllPresent())
    console.log(c.isAllPresent())
    console.log(d.isAllPresent())
    
    Object.defineProperty(Array.prototype, 'isAllPresent2', {
      get() {
        return isAllPresent(this)
      },
    })
    console.log('prototypeプロパティ')
    console.log(a.isAllPresent2)
    console.log(b.isAllPresent2)
    console.log(c.isAllPresent2)
    console.log(d.isAllPresent2)
[/code]


CC BY-SA 4.0
2022-08-27T06:17:32.330
90788
2022-08-27T06:17:32.330
9608
90785
answer


以下のような記述はどうでしょうか？

  * false：0や空文字、nullやundefined
  * true：false以外の値（数値、文字列、オブジェクト）

なので、2つ共(`.every`部分)に何かしら入ってるのがtrue

**例:**

[code]

    const a = ["", ""];
    const b = ["aa", "aa"];
    const c = ["aa", ""];
    const d = ["", "aa"];
    
    const result = [a, b, c, d].map((arr) => arr.every(Boolean));
    console.log(result);
    //[false, true, false, false]
    
[/code]


CC BY-SA 4.0
2023-07-02T12:10:14.443
95445
2023-07-03T01:45:47.370
2023-07-03T01:45:47.370
3060
58942
90785
answer