#javascript #arrays #indexing #filter
#javascript #массивы #индексирование #Фильтр
Вопрос:
Я просто хотел подтвердить то, что меня беспокоит.
Я все еще изучаю javascript и сегодня выполнил задание. Задача состояла в том, чтобы удалить значение каждого 2-го индекса.
Мне пришлось использовать фильтр как часть задачи, и я понял, что index2 в приведенном ниже коде не возвращает индекс 0 из исходного массива, отсекая значение «a». Итак, я заставил его работать, добавив 1 к каждому из индексов (index2 1). Удаляет ли он 0, потому что filter() всегда возвращает true, а 0 рассматривается как false? Извините, я знаю, что это, вероятно, простой ответ, и спасибо всем, кто нашел время, чтобы помочь мне.
const nums = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"];
const index = 3;
const extractEachKth=(nums, index)=>nums.filter((item,index2)=>(index2 1)%index!==0)
expected result ["a", "b", "d", "e", "g", "h", "j"]```
Ответ №1:
Это утверждение неверно, filter() always returns true
. Скорее filter позволит этим значениям пройти фильтр, для которого мы возвращаем true . В вашем случае вы возвращаете true, если (index2 1)%index!==0
.
Когда index2 == 0, (index2 1)%index!==0
=> (0 1)%3 !== 0
=> 1 !== 0
что верно. Поэтому он позволяет пропускать 0-й элемент из массива через фильтр.
Раньше, когда вы не добавляли 1 к индексу2,
Когда index2 == 0, index2%index!==0
=> 0%3 !== 0
=> 0!== 0
что равно false . Поэтому он отфильтровал 0-й элемент, и вы не получили этот элемент.
Комментарии:
1. Хорошо , спасибо, я думаю , что понимаю . Итак, в основном из-за того, что 0 равно false в условии фильтра, оно не возвращает 0 в индексе, если я не добавлю 1, что затем сделает его истинным?
2. Спасибо за вашу помощь, действительно ценю.
Ответ №2:
Вы могли бы взглянуть на нужные индексы, добавить один и взять оставшийся k
из трех.
Результатом является число либо 1, 2 (оба являются правдивыми), либо ноль (это неверно).
Если это значение преобразуется в логическое, вы получаете для одного и двух true
и для нуля false
.
const
nums = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"],
// 0 1 3 4 5 6 7 wanted indices
// 1 2 3 4 5 6 7 8 9 10 all index 1
// 1 2 0 1 2 0 1 2 0 1 sum % 3
// * * * * * * * take this truthy values
extractEachKth = (nums, k) => nums.filter((_, index) => (index 1) % k);
console.log(...extractEachKth(nums, 3)); ["a", "b", "d", "e", "g", "h", "j"]
Комментарии:
1. Это действительно полезно, потому что я пытался сделать что-то подобное, это подтверждает, что он добавляет 1 к 0, чтобы он прошел. Спасибо, что собрали это вместе.