javascript - Hämta en array med icke-duplicerade värden från flera arrayer


Jag behöver gå igenom flera arrayer och skapa en ny array med alla värden från de flera arrayerna utan dubbletter, finns det några plugins/snabbt sätt jag kan göra detta på?

var x = {
  "12": [3, 4],
  "13": [3],
  "14": [1, 4]
};

Resultatet bör se ut ungefär så här:

[1,3,4];

Svar #1

Du kan göra detta med ES6 spread-syntax och Object.values-metoden.

var x = {
  "12": [3, 4],
  "13": [3],
  "14": [1, 4]
}

const result = [...new Set([].concat(...Object.values(x)))]
console.log(result)

Lösning med Lodash

var x = {
  "12": [3, 4],
  "13": [3],
  "14": [1, 4]
}

const result = _.uniq(_.flatten(_.values(x)))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

Svar #2

Du kan använda array#from med set och array#reduce.

var x = {"12": [3, 4],"13": [3],"14": [1, 4]};
    result = Array.from(new Set(Object.values(x).reduce((r,a) => r.concat(a), [])));
console.log(result)

Du kan också få alla värden från ditt objekt och skapa ett objekt och få alla nycklar från det.

var x = {"12": [3, 4],"13": [3],"14": [1, 4]};
    result = Object.keys(Object
                        .values(x)
                        .reduce((r,a) => (a.forEach(v => r[v] = true), r),{})
                        ).map(Number);
console.log(result)

Relaterade artiklar