Я новичок во всем этом и пытаюсь улучшить себя, решая проблемы и задачи.
Я столкнулся с проблемой, при которой у меня есть неупорядоченный массив, содержащий 8 целых чисел.
например [2,3,1,4,6,5,8,7]
Мне нужно отсортировать его [1,2,3,4,5,6,7,8] и переупорядочить массив так, чтобы массив начинался с конечного значения, а затем с первого значения и так далее, например [8,1,7 , 2,6,3,5,4,]
Я понял, что могу использовать map () для итерации по массиву, а затем использовать push () с pop () и shift (), однако он оставляет последние 2 числа в исходном массиве, и я не уверен, почему. Я обошел это, используя concat и реверс, но я все еще не понимаю, почему pop и shift не переносят все элементы.
Код ниже, в котором не задействованы все элементы:
const reorder = (array) => {
let store = []
array.sort((a, b) => a - b).map((item, i) => {
if (array) {
store.push(array.pop())
store.push(array.shift())
}
})
return store
}
reorder([2, 3, 1, 4, 6, 5, 8, 7]) // returns [8,1,7,2,6,3]
Код, который работает, но мне нужно добавить concat и обратное:
const reorder = (array) => {
let store = []
array.sort((a, b) => a - b).map((item, i) => {
if (array) {
store.push(array.pop())
store.push(array.shift())
}
})
return store.concat(array.reverse())
}
reorder([2, 3, 1, 4, 6, 5, 8, 7]) //returns [8,1,7,2,6,3,5,4]
Спасибо за любую помощь
Как я видел, никто не объяснял, почему исходное решение OP не работает. Вот почему:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/
Map вызывает предоставленную функцию обратного вызова один раз для каждого элемента в массиве по порядку и создает новый массив из результатов. обратный вызов вызывается только для индексов массива, которым присвоены значения (включая неопределенные).
Он не вызывается для отсутствующих элементов массива; то есть:
1.Индексы, которые никогда не задавались;
2. которые были удалены ; или же
3. которым никогда не присваивалась стоимость.
Итак, в нашем коде происходит следующее:
на первой итерации
[(2), 3, 1, 4, 6, 5, 8, 7]
Map выбирает первый элемент (2) в массиве и удаляет первый и последний символы в массиве, поэтому массив становится
[3,(1), 4, 6, 5, 8]
Теперь, поскольку карта не будет учитывать удаленные элементы, вызывается второй элемент (1) в текущем массиве, а также первый и последний элементы также удаляются:
[1, 4,(6), 5]
Теперь карта пытается найти третий элемент (6) и удалить первый и последний элементы:
[4,6]
Теперь карта пытается найти четвертый элемент, который находится вне пределов, поэтому функция карты завершится.
Итак, вам настоятельно не рекомендуется использовать Array.prototype.shift
или Array.prototype.pop
в Array.prototype.map
.
Эта статья взята из Интернета, укажите источник при перепечатке.
Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.
я говорю два предложения