我有带字符串的多维数组:
const arr = [['a', 'b'], ['c', 'd'], ['d', 'a']]
如何记录所有嵌套数组中超过1次的所有值? (对于此示例功能,应该console.log'a'和'd')。
感谢您的帮助
答案 0 :(得分:4)
您首先将arr展平,然后使用 Set 从其中删除重复项。然后遍历它,然后比较lastIndexOf
和indexOf
const arr = [['a', 'b'], ['c', 'd'], ['d', 'a']]
let flat = arr.toString().split(',');
[... new Set(flat)].forEach(a => {
if(flat.indexOf(a) !== flat.lastIndexOf(a)) console.log(a)
})
答案 1 :(得分:3)
let findDupesInMDArray = (arr) => {
// flatten the array
const flat = arr.flat();
// filter for dupes
return flat.filter((item, index) => flat.indexOf(item) != index)
}
let array = [['a', 'b'], ['c', 'd'], ['d', 'a']]
const dupes = findDupesInMDArray(array)
console.log(dupes)
答案 2 :(得分:1)
使用扩展语法,Array#flat,Array#reduce,Array#filter和Array#map。
const arr = [['a', 'b'], ['c', 'd'], ['d', 'a']]
const res = Array.from(arr.flat().reduce((a,c)=>{
return a.set(c, (a.get(c)||0) + 1);
}, new Map()))
.filter(([,c])=> c > 1)
.map(([k])=>k);
console.log(res);
答案 3 :(得分:0)
您可以使用Map
对项目进行计数,而只获得计数大于1的项目。
const
count = (m, a) => Array.isArray(a) ? a.reduce(count, m) : m.set(a, (m.get(a) || 0) + 1);
var array = [['a', 'b'], ['c', 'd'], ['d', 'a']],
result = Array
.from(array.reduce(count, new Map), ([k, v]) => v > 1 && k)
.filter(Boolean)
console.log(result);
答案 4 :(得分:0)
这是一种更基本的方法:
var array = [['a', 'b'], ['c', 'd'], ['d', 'a']]
var result = [];
for (var i in array){
for (var l in array[i]){
if(array[i][l]==='a'||array[i][l]==='d')
result.push(array[i][l])
}}
var unique = new Set(result) //creates a set with unique values
console.log(unique) //should log the set {'a','d'}
我们在这里做的是