删除数组中的重复项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了删除数组中的重复项相关的知识,希望对你有一定的参考价值。
我试图传递一个从数组中删除重复项的函数。它应该处理字符串,对象,整数。到目前为止,在我的代码中,我表明它将处理字符串,但没有别的。 Imake如何通用这个函数来处理数字,处理数组,处理对象和混合类型?
let unique = (a) => a.filter((el, i ,self) => self.indexOf(el) ===i);
在这个函数中,我有一个unique()过滤来创建一个新数组,它检查数组中的元素和索引以检查是否重复。任何帮助,将不胜感激。
答案
我认为你应该做的第一件事是对数组进行排序(输入到函数)。对它进行排序可以正确排序所有数组元素。例如,如果你有一个数组[ 1, 3, 4, 'a', 'c', 'a']
,排序这将导致[ 1 , 3 , 4, 'a', 'a' , 'c' ]
,接下来的事情是过滤返回的数组。
const unique = a => {
if ( ! Array.isArray(a) )
throw new Error(`${a} is not an array`);
let val = a.sort().filter( (value, idx, array) =>
array[++idx] != value
)
return val;
}
let array = [ 1 , 5, 3, 2, "d", "q", "b" , "d" ];
unique(array); // [1, 2, 3, 5, "b", "d", "q"]
let obj = { foo: "bar" };
let arraySize = array.length;
array[arraySize] = obj;
array[arraySize++] = "foo";
array[arraySize++] = "baz";
array[arraySize++] = obj;
unique(array); // [1, 2, 3, 5, {…}, "b", "baz", "d", "foo", "hi", "q"]
它也适用于所有类型,但是如果传入一个数组文字,数组或对象作为其元素之一,则此代码将失败
unique( [ "a", 1 , 3 , "a", 3 , 3, { foo: "baz" }, { foo: "baz" } ] ); // it will not remove the duplicate of { foo: "baz" } , because they both have a different memory address
并且您还应该注意,此代码不会按照传入的顺序返回数组,这是sort
数组方法的结果
另一答案
尝试使用没有泛型的集合。你可以写一个函数
Set returnUnique(Object array[]) {
Set set=new HashSet();
for (Object obj:array) {
set.add(obj);
}
return set;
}
以上是关于删除数组中的重复项的主要内容,如果未能解决你的问题,请参考以下文章