我想知道如何从数组中删除唯一元素。例如:
var arr = [1, 2, 2, 4, 4]
会返回[2, 2, 4, 4]
。 [1, 2, 3]
将返回[]
的位置,因为所有元素都是唯一的。
我相信我需要检查每个元素与数组中的其他每个元素,但我不知道如何解决这个问题。
谢谢!
答案 0 :(得分:4)
使用ES6,您可以使用Array#map
并使用Array#forEach
计算值。
稍后使用Array#filter
并检查计数。
如果大于1
返回true
(包括结果集中的项目),否则返回false
(不包括结果集中的项目)。
function getNotUnique(array) {
var map = new Map();
array.forEach(a => map.set(a, (map.get(a) || 0) + 1));
return array.filter(a => map.get(a) > 1);
}
console.log(getNotUnique([1, 2, 2, 4, 4]));
console.log(getNotUnique([1, 2, 3] ));

答案 1 :(得分:1)
以下是从数组中删除唯一元素的基本知识和易于理解的内容。
function removeUnique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
var count = 0;
for (var j = 0; j < arr.length; j++) {
if (arr[j] == arr[i]) {
count++;
}
}
if (count >= 2) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(removeUnique([1, 2, 2, 4, 4]));
&#13;
答案 2 :(得分:1)
这应该这样做;
var arr = [1, 2, 2, 4, 4],
unq = arr.map((e,i,a) => a.filter(f => f === e ).length)
.reduce((p,c,i) => c === 1 ? p : p.concat(arr[i]) ,[]);
console.log(unq);
然而,在第二个想法中,以下可能更具可读性和效率。事实上,我们正在使用一种罕见的情况,我们可以通过短路来利用JS中的懒惰。
var r = [1,2,2,4,4].filter((e,i,a) => a.lastIndexOf(e) != i || a.indexOf(e) != i);
console.log(r);
因此a.indexOf(e) != i
部分仅针对唯一元素和最后遇到的非唯一元素运行。凉。
答案 3 :(得分:1)
下面的代码返回所有重复的值
const getDuplicatedVals = (data) => data.filter( (x) => data.indexOf(x) != data.lastIndexOf(x))
答案 4 :(得分:0)
这是一个实现(使用https://stackoverflow.com/a/5668029/4202031)
function removeUnique(arr) {
var counts = {}
for(var i = 0; i< arr.length; i++) {
var num = arr[i]
counts[num] = counts[num] ? counts[num]+1 : 1
}
var result = []
for(var key in counts) {
if(Object.prototype.hasOwnProperty.call(counts, key) && counts[key] > 1 {
result.push(key)
}
}
return result
}
var arr = [1, 2, 3]
var arr2 = [1, 1, 2, 2, 4, 6, 4]
console.log(removeUnique(arr)) // []
console.log(removeUnique(arr2)) // [ '1', '2', '4' ]
答案 5 :(得分:0)
你可以做这样的事情(严格使用数组):
var arr = [1,2,3,4,4];
var temp = [];
var to_keep = [];
for(var x = 0; x < arr.length; x++){
if(temp.indexOf(arr[x]) > -1) {
if(to_keep.indexOf(arr[x]) == -1)
to_keep.push(arr[x]);
} else if(temp.indexOf(arr[x]) == -1) temp.push(arr[x]);
}
for(var y = 0; y < arr.length; y++){
if(to_keep.indexOf(arr[y]) == -1){
arr.splice(y,1);
y--;
}
}
// arr = [4,4];
答案 6 :(得分:0)
遍历数组,使用该值作为对象的索引,并对原始中的每个匹配项进行递增。然后迭代对象并拉出总数大于1的对象。应该适用于字符串和数字类型。
function dupsOnly(a) {
var T = {};
for (var i = 0; i < a.length; i++) {
if (a[i] in T)
T[a[i]] += 1;
else
T[a[i]] = 1;
}
var D = [];
for (var t in T) {
if (T[t] > 1)
D.push(t);
while (T[t] > 1) {
T[t] -= 1;
D.push(t);
}
}
return D;
}
答案 7 :(得分:0)
var arr = [1, 2, 2, 4, 4]
var dict_with_count = {}
for (var i=0; i<arr.length; i++){
dict_with_count[arr[i]] = 0
}
for (var i=0; i<arr.length; i++){
dict_with_count[arr[i]] += 1
}
var new_list = [];
for (key in dict_with_count){
if (dict_with_count[key] > 1){
for (var j=0; j<dict_with_count[key]; j++){
new_list.push(key)
}
}
}
console.log(new_list)