Как использовать lower () для конкатенации массива и удаления дублирующихся элементов - PullRequest
0 голосов
/ 30 мая 2019

У меня проблема с использованием функции Reduce в JavaScript.Моя цель состоит в том, чтобы взять массив массивов и, используя Reduce, затем объединить все значения и удалить дубликаты:

У меня есть такой массив: firstArray = [[1, 2], [2, 3, 4], [4, 5, 6]]

Мне нужен такой массив после применения execute (): resultArray = [1, 2, 3, 4, 5, 6]

const arrayElements = [[1,2],[2,3,4],[5,6]];
const newArray = arrayElements.reduce((total, value) => {
    return total.concat(value);
}, []);

Это фрагмент, который у меня есть, это только конкатат всех значений, так сказать, [1, 2, 2, 3, 4, 5, 6]

Ответы [ 5 ]

1 голос
/ 30 мая 2019
var num = [[1,2],[2,3,4],[5,6]];
var unique_numbers = [].concat(...num);
unique_numbers = Array.from(new Set(unique_numbers ));
0 голосов
/ 30 мая 2019

Вот старомодный способ ES5 на случай, если поддержка браузера является проблемой.

var arrayElements = [[1,2],[2,3,4],[5,6]];
var newArray = arrayElements.reduce(function(total, value){
  return total.concat(value).filter(function (x, i, a) { 
    return a.indexOf(x) == i; 
  });
}, []);
console.log(newArray)
0 голосов
/ 30 мая 2019

Ваше сокращение корректно, просто добавьте данные в набор и преобразуйте набор в массив, используя синтаксис распространения ...

const arrayElements = [[1,2],[2,3,4],[5,6]];
const newArray = [...new Set(arrayElements.reduce((total, value) => total.concat(value), []))];

console.log(newArray)
0 голосов
/ 30 мая 2019

Вы можете сделать это, используя Set:

const newArray = arrayElements.reduce((accum, arr) => [...accum, ..arr], [])
const arrNoDupes = [...new Set(newArray)]

или используя filter:

const newArray = arrayElements.reduce((accum, arr) => [
  ...accum
  ...arr.filter(value => !accum.includes(value))
], [])

Это всего лишь два способа сделать то, что вы хотите достичь.

0 голосов
/ 30 мая 2019

Вы можете использовать Set и flat

const array = [[1,2],[2,3,4],[5,6]];
const newArray = [...new Set(array.flat(Infinity))]

console.log(newArray)
...