использование .every для проверки последовательности элементов в массиве

#javascript

#javascript

Вопрос:

Я пытаюсь использовать .every of Array, чтобы увидеть, являются ли элементы в массиве последовательными (1, 2, 3, 4, 5). Почему это возвращает false, когда все в нем истинно?

 const nums = [1, 2, 3, 4, 5];

nums.every((num, index) => {
  if (index !== nums.length - 1) {
    console.log(num   1 === nums[index   1]);
    return num   1 === nums[index   1];
  }
});  

Комментарии:

1. Потому что для конечного элемента index === nums.length - 1 so он возвращает undefined значение false-y .

Ответ №1:

Вы ничего не возвращаете на последней итерации, поэтому возвращаемое значение равно undefined , что неверно, поэтому .every возврат с ошибкой true в else :

 const nums = [1, 2, 3, 4, 5];

console.log(
  nums.every((num, index) => {
    if (index !== nums.length - 1) {
      console.log(num   1 === nums[index   1]);
      return num   1 === nums[index   1];
    } else {
      return true;
    }
  })
);  

Или, без console.log :

 const nums = [1, 2, 3, 4, 5];

console.log(
  nums.every((num, index) => (
    index !== nums.length - 1
    ? num   1 === nums[index   1]
    : true
  ))
);  

Ответ №2:

Я бы вернул true для первого элемента, а затем сверил последний элемент с фактическим.

Почему первый элемент? Это проще проверить. Сравнить

 !index
  

против

 index !== array.length - 1
  

Как вы видите, первая проверка короче, по сравнению со второй.

 const
    nums = [1, 2, 3, 4, 5],
    isInOrder =  nums.every((num, index, array) => {
        if (!index) return true;
        return array[index - 1]   1 === num;
    });

console.log(isInOrder);  

Комментарии:

1. nums.every((num, index, array) => !index || array[index - 1] 1 === num);

2. Да, вы правы. В любом случае, только для однострочного решения 😉

Ответ №3:

На последней итерации вы возвращаете undefined. Попробуйте

 nums.every( (x,i,a)=> x==a[0] i )
  

 const nums = [1, 2, 3, 4, 5];
const numsBad = [1, 2, 4, 3, 5];

let test = arr => arr.every( (x,i,a)=> x==a[0] i )

console.log(test(nums));
console.log(test(numsBad));