Я просто хотел подтвердить то, что меня беспокоит.
Я все еще изучаю javascript и сегодня сделал вызов. Задача состояла в том, чтобы удалить значение каждого второго индекса.
Мне пришлось использовать фильтр как часть задачи, и я понял, что 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"]```
🤔 А знаете ли вы, что...
JavaScript - это скриптовый язык программирования, разработанный Netscape Communications Corporation.
Это утверждение неверно, filter() always returns true
. Скорее фильтр позволит тем значениям пройти фильтр, для которого мы возвращаем 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
, что неверно. Поэтому он отфильтровал 0-й элемент, и вы не получили этот элемент.
Вы можете посмотреть индексы розыска, добавить один и взять остаток желаемого 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.info(...extractEachKth(nums, 3)); ["a", "b", "d", "e", "g", "h", "j"]