Javascript 如何仅返回数组中唯一的值?

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]

给定

[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] === 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;jfilter.indexOfo==-1 返回输出; }
console.logreturnUniquesinput 单回路解决方案:

常量输入=[1,3,1,1,6,22]; const returnUniques=数组=>{ 让输出=[]; 让过滤器=[]; 对于设j=0;jfilter.indexOfo==-1 返回输出; } console.logreturnUniquesinput 像这样的

设arrayData=[1,3,1,6,22]; 让getUniqueValuesFunc=arrayParam=>{ 让unqiueValues=[]; 对于arrayParam的let unqiueValue{ 让compare=arrayParam.filterx=>x==unqiueValue; 如果compare.length==1 unqiueValues.pushunqiueValue; } 返回unqiuevalue; }; console.loggetUniqueValuesFunc arrayData 像这样的

设arrayData=[1,3,1,6,22]; 让getUniqueValuesFunc=arrayParam=>{ 让unqiueValues=[]; 对于arrayParam的let unqiueValue{ 让compare=arrayParam.filterx=>x==unqiueValue; 如果compare.length==1 unqiueValues.pushunqiueValue; } 返回unqiuevalue; };
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
}