Разрушающий элемент синтаксического массива и остаток - PullRequest
3 голосов
/ 14 июня 2019

Я пытаюсь освоить синтаксис назначения деструктурирования, чтобы выполнить следующее:

У меня есть массив элементов, скажем const arr = ['a','b','c'], которые я хочу отобразить в другой массив массивов, где каждый элементостаток от выбора элементов из исходного массива, т.е. [['b','c'],['a','c'],['a','b']]

Для этой цели я пытаюсь сделать

arr.map((_,i) => ([arr[i],...rest] = arr, rest))

И это возвращает

[['b', 'c'],['a', 'c'],['a', 'a']]

Что явно не то, что мне нужно.Я думаю, это потому, что arr сам как-то мутирует в процессе.

Я знаю, я мог бы использовать splice() или что-то еще, но я пытаюсь выяснить, как заставить это работать должным образом.

Спасибо за вашу помощь.

Ответы [ 2 ]

7 голосов
/ 14 июня 2019

Вы можете напрямую деструктурировать массив и удалить элемент по фактическому индексу.

var array = ['a', 'b', 'c'],
    result = array.map((_, i, { [i]: __, ...a }) => Object.values(a));

console.log(result); // ab ac bc
2 голосов
/ 14 июня 2019

Проблема в том, что ваш код всегда удаляет первый элемент из массива. Вы можете преобразовать массив в объект, а затем использовать обозначение в скобках [], чтобы указать индекс, который нужно удалить. А потом вернуть значения объекта.

let arr = ['a','b','c'];

const res = arr.map((_,i) => {
  let {[i]:removed,...rest} = Object.assign({},arr);
  return Object.values(rest)
})
console.log(res)
...