早上好,我正在尝试使用forEach
循环从数组中删除重复的元素。但是在这个时候我遇到了一些错误。以下是我的代码
function removeDup(arr) {
let result = arr.forEach((item, index) => { if (index > 1) item.shift() });
return result;
}
我什至不确定此代码是否可以删除重复项,因为当我在浏览器console
中运行它时,会出现此错误
如果(索引> 1)item.shift(); ^
TypeError:item.push不是函数
首先,我该如何解决此错误,其次,此代码可用于删除重复项?
答案 0 :(得分:5)
您可以尝试:
function removeDup(arr) {
let result = []
arr.forEach((item, index) => { if (arr.indexOf(item) == index) result.push(item) });
return result;
}
说明:
首先使用空数组初始化结果。然后遍历传递的数组,检查索引是否是它的第一个项目。推送到结果数组。返回结果数组。
替代解决方案:
function removeDup(arr) {
let result = []
arr.forEach((item, index) => { if (result.indexOf(item) === -1) result.push(item) });
return result;
}
说明:
通过检查该元素是否已经被推入结果数组,可以避免将索引作为第一次出现。
答案 1 :(得分:2)
为什么不使用Set
?例如
var arr = ['a', 'b', 'a']
var unique = Array.from(new Set(arr))
console.log(unique) // ['a', 'b']
答案 2 :(得分:1)
function findDuplicates(data) {
let result = [];
data.forEach(function(element, index) {
//Checks data.indexOf(1) which is 0 === 0, then push it to array
//Now again when it checks the value of 1 which corresponds to a value of 1 but in forloop has an index of 5, so exits and duplicate values are not pushed
if (data.indexOf(element) === index) {
result.push(element)
}
});
return result;
}
console.log(findDuplicates([1, 2, 3, 4, 5, 1, 2]))
答案 3 :(得分:1)
您可以使用filter
,它将返回一个新的数组集作为您的检查条件
indexOf()方法在数组中搜索指定的项,并返回其位置。
搜索将从指定位置开始,或者如果未指定起始位置,则从搜索开始,然后在数组末尾结束搜索。
如果找不到该项目,则返回-1。
如果该项目多次出现,则indexOf方法将返回第一次出现的位置。
function removeDup(arr) {
let result = arr.filter(function (item, pos) {return arr.indexOf(item) == pos});
// at first loop -> item = 1 -> so indexOf = 0 & pos = 0 -> so return data
// at second loop -> item = 4 -> so indexOf = 1 & pos = 1 -> so return data
// at third loop -> item = 5 -> so indexOf = 2 & pos = 2 -> so return data
// at fourth loop -> item = 4 -> so indexOf = 1 & pos = 3 -> no return
// at fifth loop -> item = 1 -> so indexOf = 0 & pos = 4 -> no return
return result;
}
var d = removeDup([1,4,5,4,1]);
console.log(d);