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