🐕 array.every array.some
作成日: 2021/07/19
1

ざっくりいうと
every: 配列の中のどれかがfalseだったらfalse
some: 配列の中のどれかがtrueだったらtrue

使用例:
入力フォームなどですべてが入力されていないのに送信しようとしたとき、
everyを使えばエラーが出るようにする。など。


let computers: { name: string; ram: number }[] = [
  { name: 'Apple', ram: 24 },
  { name: 'Compaq', ram: 4 },
  { name: 'Acer', ram: 32 },
];

// 16GB ramが必要なソフト

// 全てで動かせるフラグ
let allComputersCanRun: boolean = true;

// どれかでは動かせるフラグ
let someComputersCanRun: boolean = false;

for (let i: number = 0; i < computers.length; i++) {
  let computer = computers[i];

  if (computer.ram < 16) {
    allComputersCanRun = false;
  } else {
    someComputersCanRun = true;
  }
}

console.log(allComputersCanRun);
console.log(someComputersCanRun);

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// everyを使って全てのcomputerで使えるかどうか
// 一個一個を判定して&&で繋ぐので一個でもfalse(16GB以下)があれば結果はfalseに
console.log(
  computers.every(function (computer) {
    return computer.ram >= 16;
  })
);

// someを使って全てのcomputerで使えるかどうか
// 一個一個を判定して||で繋ぐので一個でもtrue(16GB以上)があれば結果はtrueに
console.log(
  computers.some((computer) => {
    return computer.ram >= 16;
  })
);

const names: string[] = ['たく', 'はなこ', 'けんたろう', 'Michael'];

console.log(
  '全員の名前が3文字以上' +
    names.every((name) => {
      return name.length >= 3;
    })
);

console.log(
  '誰かの名前が3文字以上' +
    names.some((name) => {
      return name.length >= 3;
    })
);

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// everyとsomeの使いどころ TypeScriptあんまり機能してません。

class Field {
  value: any;
  validate: any;
  constructor(value: any) {
    this.value = value;
  }
}

Field.prototype.validate = function () {
  return this.value.length > 0;
};

let userName = new Field('my_userName');
let password = new Field('my_password');
let birthday = new Field('1992/12/19');

let fields = [userName, password];

let formIsValid = fields.every((field) => {
  return field.validate();
});

if (formIsValid) {
  console.log('サーバへリクエスト');
} else {
  console.log('エラー');
}