array.length === 0 がマジックナンバーだよって lint に怒られる


Node.js 使い始めて数カ月がたちます。今まではブラウザで動く、生の JavaScript しか書いたことないので、覚えることが多くて困っています。最近はテストの自動化に手を付け始めて、テスト自動化のついでに eslint も導入してみたのですが、エラーが出まくる出まくる・・・。(300行くらいでエラー200件)

基本は簡単につぶせるのですが困ったのが次の2つ。

let inputValue = ['tori'];

let allowedValue = [
  'kuma',
  'neko',
];

if (inputValue.length === 0) { // error  No magic number: 0 no-magic-numbers
  throw new Error("空だよ!");
}

// true になる
let error = inputValue.some((value) => {
  if (allowedValue.indexOf(value) === -1) { // error No magic number: -1 no-magic-numbers
    return true;
  }
  return false;
});

配列の length と indexOf のチェックですね。indexOf は includes で置き換え可能なのでいいですが、length の方はわざわざ 0 を定数定義するのもなんかなーといった感じです。

結局以下のような感じにしましたが、なんか微妙です。

let inputValue = ['tori'];

const allowedValue = [
  'kuma',
  'neko',
];

if (!inputValue.length) { // int からの暗黙的型変換が・・・
  throw new Error("空だよ!");
}

// true になる
let error = inputValue.some((value) => {
  if (!allowedValue.includes(value)) { // === false でもいいかも
    return true;
  }
  return false;
});