从多个数组中获取具有非重复值的数组

时间:2018-01-26 15:17:28

标签: javascript arrays typescript

我需要经历多个数组并使用多个数组中的所有值创建一个新数组,没有重复,是否有任何插件/快速方法可以执行此操作?

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

结果应如下所示:

[1,3,4];

5 个答案:

答案 0 :(得分:3)

您可以使用ES6扩展语法和Object.values方法执行此操作。



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

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




使用 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>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以将array#fromsetarray#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)

您还可以从对象获取所有值并创建一个对象并从中获取所有键。

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)

答案 2 :(得分:0)

您可以遍历所有密钥,然后遍历您的阵列:

var outputArray = [];
for (var y in x) {
    for (var z = 0; z < x[y].length; z++) {
        if (outputArray.indexOf(x[y][z]) === -1) {
            outputArray.push(x[y][z]);
        }
    }
}

https://jsfiddle.net/80c8ctuo/

答案 3 :(得分:0)

您可以使用Object.values获取所有数组,然后使用concat将它们合并为一个数组。在此之后,您可以使用filter删除重复项。

&#13;
&#13;
const x = {"12": [3, 4],"13": [3],"14": [1, 4]};
const result = [].concat.apply([], Object.values(x)).filter((el, i, a) => i === a.indexOf(el));
console.log(result)
&#13;
&#13;
&#13;

答案 4 :(得分:0)

如果对象来自JSON.parse

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

var a = [], x = JSON.parse(j, (k, v) => (a[v] = +v, v))

console.log( a.filter(isFinite) )