Проблема с массивом JavaScript. Первый элемент переходит на последнюю позицию

0

Вопрос

У меня есть функция, которая получает массив и возвращает массив с мощностью 2 каждого элемента массива. Это исходный код

const firstArr = [1, 2, 3, 7, 4, 9];

function arrayPow(arr) {
    const outputArray = [];
    arr.forEach(el => {
        console.log(el);
        outputArray.splice(-1, 0, el**2);
    })
    return outputArray;
}

console.log(arrayPow(firstArr));

Я получил это в качестве вывода:

script.js:8 1
script.js:8 2
script.js:8 3
script.js:8 7
script.js:8 4
script.js:8 9
script.js:14 (6) [4, 9, 49, 16, 81, 1]

График элементов исправлен в цикле. Но теперь в массиве есть первый элемент, в некотором резонансе, остающийся в конце. Я попытался удалить "1" из firstArr, затем "4" перейти на последнюю позицию. Почему?

arrays javascript
2021-11-24 04:49:39
3

Лучший ответ

2

Добавление -1 в ваше соединение означает, что вы вставляете перед последним элементом в массиве. Когда массив пуст, он просто добавляется как единственный элемент.

После этого вы вставляете перед последним элементом массива, поэтому каждая последующая итерация будет добавлять элемент в качестве второго последнего элемента.

Я бы просто использовал магию ES6:

const firstArr = [1, 2, 3, 7, 4, 9];
const arrayPow = (arr) => arr.map(i => i**2)
console.log(arrayPow(firstArr))

2021-11-24 05:14:02
0

Используйте этот код, он будет работать как шарм!

const firstArr = [1, 2, 3, 7, 4, 9];

function arrayPow(arr) {
    return arr.map(v => v ** 2);
}

console.log(arrayPow(firstArr));
2021-11-24 05:01:15

Боже милостивый, это такой тяжелый, запутанный способ сделать это. Вы можете буквально получить функцию возведения в квадрат, которая ТАКЖЕ позволяет вам указать другую мощность для повышения, если вы хотите, в одной строке: const arrayPow = (arr, pow = 2) => arr.map(el => el**pow);
Jayce444

Этот оригинальный ответ был подобен убийству мухи из дробовика.
Steve
0

Если я правильно понимаю ваш вопрос, вы хотите увеличить каждый элемент массива в степени 2? Если да, то я не уверен, почему вы соединяете массив. Вы могли бы попробовать следующее:

function arrayPow(arr) {
    const outputArray = [];
    arr.forEach(el => {
        outputArray.push(el**2);
    })
    return outputArray;
}

const test = [1,2,3]
console.log(arrayPow(test))

2021-11-24 05:04:18

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................