我需要遍历多个数组并创建一个新的数组,其中包含多个数组中的所有值但没有重复项,是否有任何插件/快速方法可以做到这一点?
var x = {
"12": [3, 4],
"13": [3],
"14": [1, 4]
};
结果应该看起来像这样:
[1,3,4];
我需要遍历多个数组并创建一个新的数组,其中包含多个数组中的所有值但没有重复项,是否有任何插件/快速方法可以做到这一点?
var x = {
"12": [3, 4],
"13": [3],
"14": [1, 4]
};
[1,3,4];
Object.values
方法来实现这一点。
var x = {
"12": [3, 4],
"13": [3],
"14": [1, 4]
}
const result = [...new Set([].concat(...Object.values(x)))]
console.log(result)
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>
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)
你可以循环遍历所有的键和数组:
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]);
}
}
}
您可以使用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)
如果对象是通过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) )
[...new Set([].concat.apply([], Object.values(x)))]
- Seraf