Используя только `.reduce ()`, чтобы поменять 2 элемента в массиве в JavaScript? - PullRequest
0 голосов
/ 16 февраля 2019

Я хотел бы выяснить, можно ли менять элементы, используя только .reduce в JavaScript.Если нет, то что еще нужно использовать из функциональной области программирования?

Это не для сортировки массива.Я хотел найти все перестановки элемента массива, используя .reduce, что требовало шага подкачки согласно этому методу.

Ответы [ 3 ]

0 голосов
/ 16 февраля 2019

В es6 идиоматический способ обмена элементами массива:

;[a[i], a[j]] = [a[j], a[i]]

Использование .reduce не подходит для этой задачи.Технически вы можете сделать что-то вроде этого:

a = a.reduce((acc, element, idx) => {
    acc.push(idx === i ? a[j] : idx === j ? a[i] : a[idx])
    return acc
}, [])

, но это приведет к запутанному коду.

Если ваша цель состоит в том, чтобы избежать изменения исходного массива, вы можете использовать Object.assign:

b = Object.assign([], a, {[i]: a[j], [j]: a[i]})
0 голосов
/ 16 февраля 2019

Функция reduce уменьшает массив до значения объекта, как определено accumulator.

let array1 = [2, 5, 8, 0, 10];
let array2 = [1, 4, 9, 7, 6];

const reducer = (accumulator, currentValue) => accumulator + currentValue;

// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer));
// expected output: 10

// 5 + 1 + 2 + 3 + 4
console.log(array1.reduce(reducer, 5));
// expected output: 15

Метод sort() сортирует элементы массива на месте и возвращает массив.Порядок сортировки по умолчанию строится после преобразования элементов в строки и сравнения их последовательностей значений кодовых единиц UTF-16.

  

var months = ['March', 'Jan', 'Feb', 'Dec'];
months.sort();
console.log(months);
// expected output: Array ["Dec", "Feb", "Jan", "March"]

const sortingAccending = (a, b) => a - b

let numbers = [4, 2, 5, 1, 3];
numbers.sort(sortingAccending);
console.log(numbers);
// expected output: Array [1, 100000, 21, 30, 4]

И вы ответите на свой вопрос, reduce нельзя использовать для замены элементов.Вам придется либо использовать sort для написания пользовательской сортировки function

0 голосов
/ 16 февраля 2019

Вы можете взять функцию, которая принимает массив и два индекса и использует деструктурирующее присваивание .

const swap = (array, i, j) => [array[i], array[j]] = [array[j], array[i]];

var array = [1, 2, 3];

swap(array, 0, 1)
console.log(array);

Версия с уменьшением путем взятия массива индексов и перестановки всех пар от начала до конца.

const
    swap = (array, ...indices) => 
        indices.reduce((a, b) => ([array[a], array[b]] = [array[b], array[a]], b));

var array = [1, 2, 3];

swap(array, 0, 1)
console.log(array);
...