#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));