список номеров к списку номеров - PullRequest
0 голосов
/ 06 февраля 2019

список номеров в список номеров [[1,2], [3,4], [5,1]] Ожидаемый [1,2,3,4,5]

array.filter(), array.map ()

<!DOCTYPE html>
<html>
<head>
    <title>Expected - [1,2,3,4,5,6,7,8,9,10]</title>
</head>
<body>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $( document ).ready(function() {
            // Expected - [1,2,3,4,5,6,7,8,9,10];
            var array_of_arrays = [[1, 2],[3, 4], [5, 6], [7, 8], [9, 10], [1, 2],[3, 4], [5, 6], [7, 8], [9, 10]];
            console.log(array_of_arrays);

            // Section 1 - code does what i expect. - I would like something like Section 2.
            var array_of_values = [];
            array_of_arrays.map((x) => { x.map((y) => { if(array_of_values.indexOf(y) == -1) array_of_values.push(y) }) });
            console.log(array_of_values);

            // Section 2 - This code does not do what I expect.
            var resp = array_of_arrays.map(x => x.map(y => y));
            console.log(resp);
        });
    </script>
</body>
</html>

ошибка результата => [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]

Ответы [ 6 ]

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

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

 var list = [[1,2],[3,4],[5,1]];
 var arr = list.reduce((acc, c)=>{ c.map((a)=>{  acc.add(a) }); return acc; }, new Set());
0 голосов
/ 06 февраля 2019

Это то, что вы хотели.

Прочитать комментарий

var array_of_arrays = [[1, 2],[3, 4], [5, 6], [7, 8], [9, 10], [1, 2],[3, 4], [5, 6], [7, 8], [9, 10]];
// flat the array and then select distinct after that sort the array out
var arr = array_of_arrays.flatMap((x)=>x).filter((x, i, a) => a.indexOf(x) == i).sort((a,b)=> a-b)

console.log(arr)
0 голосов
/ 06 февраля 2019

Вы можете создать distinct фильтр и использовать flatMap

const distinct = (value, index, self) => {
  return self.indexOf(value) == index;
}

console.log(
  [[1,2],[3,4],[5,6],[7,8],[9,10],[1,2],[3,4],[5,6],[7,8],[9,10]]
  .flatMap(x => x)
  .filter(distinct)
);
0 голосов
/ 06 февраля 2019

Я сделаю это с помощью limit () и использованием set в качестве accumulator:

let input = [[1,2],[3,4],[5,1]];

let res = input.reduce((acc, a) =>
{
    a.forEach(x => acc.add(x));
    return acc;
}, new Set());

console.log(Array.from(res));

Или с использованием экспериментальной flat () :

let input = [[1,2],[3,4],[5,1]];
let res = new Set(input.flat());
console.log(Array.from(res));
0 голосов
/ 06 февраля 2019

Вы можете использовать это, используя Array.prototype.reduce () и используя Set

let arr = [[1,2],[3,4],[5,1]]
//flatting array
arr = arr.reduce((ac,item) => ([...ac,...item]),[])
//remove dupliactes
arr = [...new Set(arr)];
console.log(arr);
0 голосов
/ 06 февраля 2019

Вы можете использовать flatMap к этому.Он выравнивает (снимает) массив в соответствии с предоставленной функцией обратного вызова.Используя фильтр, отфильтруйте дубликаты и сортируйте их, используя sort ()

var a=[[1,2],[3,4],[5,1]].flatMap((x)=>x);
var arr=[];
console.log(a.filter((e)=>arr.indexOf(e)==-1?arr.push(e):false).sort());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...