Javascript 简单解决方案删除JS数组中的重复项。必须使用push或pop和forEach

Javascript 简单解决方案删除JS数组中的重复项。必须使用push或pop和forEach,javascript,arrays,foreach,include,Javascript,Arrays,Foreach,Include,所以,我还在学习,所以请原谅我的简单本性。但我正在尝试编写一个名为uniq(arr)的函数。如果它工作,它将返回一个没有任何重复值的新数组。它不应更改原始数组 下面是两个测试调用,它们当前不起作用。我不确定这个错误意味着什么 > uniq([1,2,3]) 预期:[1,2,3]但得到: TypeError:undefined不是对象(正在计算“copy.includes”) > uniq(['a','a','b'])) 应为:['a','b'],但得到:TypeError:undefined不是

所以,我还在学习,所以请原谅我的简单本性。但我正在尝试编写一个名为uniq(arr)的函数。如果它工作,它将返回一个没有任何重复值的新数组。它不应更改原始数组

下面是两个测试调用,它们当前不起作用。我不确定这个错误意味着什么 > uniq([1,2,3]) 预期:[1,2,3]但得到:

TypeError:undefined不是对象(正在计算“copy.includes”)

> uniq(['a','a','b'])) 应为:['a','b'],但得到:TypeError:undefined不是对象(计算'copy.includes')


Set
使数组唯一

const unique=(arr)=>{
返回[…新集合(arr)];
}
log(唯一([1,2,3,3,2,5]))

//输出:[1,2,3,5]
您的代码有两个问题。 初始错误来自副本没有值。您需要给它一个空数组的值,以便能够对其调用数组方法

 var copy = [];
第二个错误是如何使用
push
方法。您需要调用push-on-array,而不是相反的方式(请参见下文)

解决这些问题后,我们将看到这个工作示例

功能uniq(arr){
var copy=[];
arr.forEach(功能(项目){
如果(!副本包括(项目)){
复制、推送(项目);
}
});
返回副本;
}

log(uniq(['a','a','b'])
copy=[]
push.copy(项目)
->
copy.push(项目)
?而且,
uniq=a=>[…新集合(a)]更简单,具有更好的时间复杂度,并且应该保持顺序。
在这里包括的唯一优点是它不分配对象,这会产生一次性开销。
push.copy
=>
copy.push
它是
object.method
,而不是
method.object
。(投票以打字错误/不重复/对其他人没有用处的方式结束)请忽略教您将结束
}
放在块的最后一行的人。这是一种非常难读、难理解、难写、难修改的文体。将
}
放在它们自己的行上,与启动它们的结构对齐。:-)要使上述注释生效,首先必须在
copy
中存储一个数组。现在它只是
未定义的
->
var copy=[]精彩@T.J.Crowder。右括号是我的用户错误。出于可以追溯到我写作时代的原因,我讨厌单打台词。将尝试继续使用它们。但是,不要像问题所说的那样使用
push
pop
。如果这是答案,那么将有一个DupiTaGet可供选择,而不是发布答案。
 var copy = [];
copy.push(item);