Javascript 如何仅返回数组中唯一的值?
给定 [1,3,1,6,22] 它应该会回来 [3,6,22] 到目前为止,我有:Javascript 如何仅返回数组中唯一的值?,javascript,arrays,Javascript,Arrays,给定 [1,3,1,6,22] 它应该会回来 [3,6,22] 到目前为止,我有: const returnUniques = (array) { if (array.length == 1) return array[0] for (let i = 0; i < array.length; i++) { for (let j = 0; j < array.length; j++) { if (i !== j) { if (array[i]
const returnUniques = (array) {
if (array.length == 1) return array[0]
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length; j++) {
if (i !== j) {
if (array[i] === array[j]) {
}
}
}
}
return array
}
使用集合和筛选器检查第一个索引和最后一个索引是否相同 const returnUniques=arr=>{ return[…new Setarr].filtern=>arr.indexOfn===arr.lastIndexOfn }
console.logreturnUniques[1,3,1,6,22]使用集合和过滤器检查第一个索引和最后一个索引是否相同 const returnUniques=arr=>{ return[…new Setarr].filtern=>arr.indexOfn===arr.lastIndexOfn } logreturnUniques[1,3,1,6,22]使用Array.prototype.reduce,您可以获得每个项目的计数 根据这些内容,您可以过滤只出现一次的数组项 常量输入=[1,3,1,6,22]; const uniques=arr=>{ const groupBy=arr.reduceac,cur=>{ acc[cur]?acc[cur]++:acc[cur]=1; 返回acc; }, {}; 返回Object.entriesgroupBy.filter[key,count]=>count==1.map[key,count]=>Numberkey; }; console.loguniquesinput 使用Array.prototype.reduce,可以获得每个项目的计数 根据这些内容,您可以过滤只出现一次的数组项 常量输入=[1,3,1,6,22]; const uniques=arr=>{ const groupBy=arr.reduceac,cur=>{ acc[cur]?acc[cur]++:acc[cur]=1; 返回acc; }, {}; 返回Object.entriesgroupBy.filter[key,count]=>count==1.map[key,count]=>Numberkey; };
console.loguniquesinput 你可以这样做 const removeDuplicates=arr=>{ 常量结果=[]; 对于arr的常数v{ const occurrences=arr.filterx=>x==v; if occurrences.length==1 results.pushv; } 返回结果; };
控制台.logremoveDuplicates[1,3,1,6,22] 你可以这样做 const removeDuplicates=arr=>{ 常量结果=[]; 对于arr的常数v{ const occurrences=arr.filterx=>x==v; if occurrences.length==1 results.pushv; } 返回结果; };
控制台.logremoveDuplicates[1,3,1,6,22] 单回路解决方案: 常量输入=[1,3,1,1,6,22]; const returnUniques=数组=>{ 让输出=[]; 让过滤器=[]; 对于设j=0;j
console.logreturnUniquesinput 单回路解决方案: 常量输入=[1,3,1,1,6,22]; const returnUniques=数组=>{ 让输出=[]; 让过滤器=[]; 对于设j=0;j
console.loggetUniqueValuesFunc arrayData 如果第一个索引等于元素的最后一个索引,则它是唯一的: const unique=array=> array.filtere,idx,arr=>arr.indexOfe===arr.lastIndexOfe
console.logunique[1,3,1,6,22]如果第一个索引等于元素的最后一个索引,则它是唯一的: const unique=array=> array.filtere,idx,arr=>arr.indexOfe===arr.lastIndexOfe
console.logunique[1,3,1,6,22]不,我需要返回[3,6,22]你没有读到我说过我可以使用set方法吗?谢谢,使用过滤器会更好,但是为什么我们只比较第一个索引和最后一个索引?我的意思是,你的过滤器在这种情况下是如何工作的?哦,我明白了,如果arr.indexOfn!==这意味着有不止一个像这样的,所以不要加上它,对吗?是的。。。对于非常大的数据集,这可能不是最有效的方法,但对于较小的数据集,这应该可以很好地工作不,我需要返回[3,6,22]您没有读到我说过我可以使用set方法吗?谢谢,使用过滤器会更好,但为什么我们只比较第一个索引和最后一个索引?我的意思是,你的过滤器在这种情况下是如何工作的?哦,我明白了,如果arr.indexOfn!==这意味着有不止一个像这样的,所以不要加上它,对吗?是的。。。对于非常大的数据集
可能不是最有效的,但对于较小的集合来说,应该可以很好地工作。您的方法并没有那么糟糕。但是,我会在returnUniques函数中创建一个新的空数组,用通过测试的条目填充它,然后返回新数组。不要修改原始数组。但是如何用没有重复的值填充新数组?首先,我尝试将数组[I]==array[j]更改为数组[I]!==数组[j]但这并不能解决问题,哈哈。谢谢你的提示,我会通过尝试更多来找到解决方案:你的方法没有那么糟糕。但是,我会在returnUniques函数中创建一个新的空数组,用通过测试的条目填充它,然后返回新数组。不要修改原始数组。但是如何用没有重复的值填充新数组?首先,我尝试将数组[I]==array[j]更改为数组[I]!==数组[j]但这不起作用,哈哈。谢谢你的提示,我将通过尝试更多的方法来找到解决方案:如果示例1在输入范围内三次,这将不起作用。@AbishekKumar反射得很好!如果示例1在输入范围内三次,这将不起作用。@AbishekKumar反射得很好!美好的我最喜欢这个解决方案,因为它是简单易懂的干净代码。我最喜欢这个解决方案,因为它是简单易懂的干净代码。我喜欢这个!易于理解:这与上面@Rvfvl的解决方案完全相同:-我喜欢这个!易于理解:这与上面@Rvfvl的解决方案完全相同:-
const returnUniques = (array) {
if (array.length == 1) return array[0]
for (let i = 0; i < array.length; i++) {
for (let j = 0; j < array.length; j++) {
if (i !== j) {
if (array[i] === array[j]) {
array.splice(i, 1)
}
}
}
}
return array
}