过滤第一个元素在数组中重复两次以上的项



我有一个数组,想要过滤第一个元素在该数组中重复两次以上的项。

朋友们,我该怎么做呢?

arr=[
[a,1],
[a,2],
[a,4],
[b,2],
[C,2],
[d,2],
[e,2],
[e,2],
[n,2],
...
]

我希望过滤器的结果如下

result=[
[a,1],
[a,2],
[a,4],
[e,2],
[e,2],
...
]

arr=[['a',1],['a',2],['a',4],['b',2],['C',2],['d',2],['e',2],['e',2],['n',2]]; temp=arr.map(val=>val[0]).filter((a,i,aa)=>aa.indexOf(a)===i&&aa.lastIndexOf(a)!==i);
result=arr.filter((a, i,aa)=>temp.includes(aa[i][0]));
console.log(result)

要筛选数组中第一个元素重复两次以上的项。

要做到这一点,你需要:

  1. 创建一个包含重复时间字符的元素的散列映射
  2. 只保留数组中重复两次或两次以上的元素次。
const arrays=[['a',1], ['a',2], ['a',4], ['b',2], ['C',2], ['d',2], ['e',2],['e',2], ['n',2]];
//utility function to get keys of each entry
const keys = arr => arr.map(char=>char[0]);
let chars = keys(arrays); // ['a', 'a', 'a', 'b', 'C', 'd', 'e', 'e', 'e', 'n']
// 1.
const hashMap = new Map();
chars.forEach(char=>{
count = hashMap.get(char)||0;
hashMap.set(char, ++count);
});
const dict = [...hashMap].filter(([char, count])=>count>=2)
// 2.
uniqueChars = keys(dict);
const result = arrays.filter(([chr, num])=>uniqueChars.includes(chr))
console.log(result)

结果:

['a', 1]
['a', 2]
['a', 4]
['e', 2]
['e', 2]

看看这个:

arr=[['a',1], ['a',2], ['a',4], ['b',2], ['C',2], ['d',2], ['e',2], ['e',2], ['n',2]];
const reducedObject = arr
.reduce((acc, [key, value]) => (
acc[key] = acc[key] 
? [...acc[key], [key, value]] 
: [[key, value]],
acc
), {});
console.log(reducedObject);
// {
//   a: [ [ 'a', 1 ], [ 'a', 2 ], [ 'a', 4 ] ],
//   b: [ [ 'b', 2 ] ],
//   C: [ [ 'C', 2 ] ],
//   d: [ [ 'd', 2 ] ],
//   e: [ [ 'e', 2 ], [ 'e', 2 ] ],
//   n: [ [ 'n', 2 ] ]
// }
const result = Object
.values(reducedObject)
.filter((values) => (values.length >= 2))
.reduce((acc, values) => ([...acc, ...values]), []);
console.log(result);
// [ 
//   [ 'a', 1 ], 
//   [ 'a', 2 ], 
//   [ 'a', 4 ], 
//   [ 'e', 2 ], 
//   [ 'e', 2 ] 
// ]

另一个单行解决方案:

const result2 = arr
.map(([ key ]) => key)  //[ 'a', 'a', 'a', 'b', 'C', 'd', 'e', 'e', 'n' ]
.filter((key, index, array) => array.indexOf(key) !== index)  //[ 'a', 'a', 'e' ]
.filter((key, index, array) => array.indexOf(key) === index)  //[ 'a', 'e' ]
.reduce((acc, key) => (  
[...acc, ...arr.filter(([ itemKey ]) => (itemKey === key))]
), []);   

console.log(result2);
// [ [ 'a', 1 ], [ 'a', 2 ], [ 'a', 4 ], [ 'e', 2 ], [ 'e', 2 ] ]

相关内容

  • 没有找到相关文章

最新更新