我需要经历多个数组并使用多个数组中的所有值创建一个新数组,没有重复,是否有任何插件/快速方法可以执行此操作?
var x = {
"12": [3, 4],
"13": [3],
"14": [1, 4]
};
结果应如下所示:
[1,3,4];
答案 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;
答案 1 :(得分:1)
您可以将array#from
与set
和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)
您还可以从对象获取所有值并创建一个对象并从中获取所有键。
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]);
}
}
}
答案 3 :(得分:0)
您可以使用Object.values
获取所有数组,然后使用concat
将它们合并为一个数组。在此之后,您可以使用filter
删除重复项。
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;
答案 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) )