JavaScript数组:只保留出现奇数次的值,包括一次

JavaScript数组:只保留出现奇数次的值,包括一次,javascript,arrays,splice,Javascript,Arrays,Splice,嘿,伙计们,举个例子,我有一个数组: myArray[5,4,1,2,1,4,5,6,7,8,9,10,1,2,1,5,3,2] 我正在对数组进行排序: [1, 1, 1, 1, 10, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9] 我只想删除两个副本,这样我想要的数组 [10,2,3,5,6,7,8,9] 所以我使用的是拼接: for (var index = 0; index < myArray.length +1; ++myArray) {

嘿,伙计们,举个例子,我有一个数组:

myArray[5,4,1,2,1,4,5,6,7,8,9,10,1,2,1,5,3,2]
我正在对数组进行排序:

[1, 1, 1, 1, 10, 2, 2, 2, 3, 4, 4, 5, 5, 5, 6, 7, 8, 9]
我只想删除两个副本,这样我想要的数组

[10,2,3,5,6,7,8,9]
所以我使用的是拼接:

for (var index = 0; index < myArray.length +1; ++myArray) {
  if(myArray[index+1]== myArray[index]) {
    myArray.splice(index);
    myArray.splice[index+1];
  }
}
for(var index=0;index
但当我推动更多的数字时,结果似乎不可预测 如何正确地做到这一点


澄清:目的是消除重复次数为偶数的数字

您可以使用两个
reduce
Object.keys()
来执行此操作。首先向对象添加值,然后用
%2
检查每个值并添加到数组

var myArray=[5,4,1,2,1,4,5,6,7,8,9,10,1,2,1,5,3,2];
var obj=myArray.reduce(函数(o,e){
o[e]=(o[e]| | 0)+1;
返回o;
}, {})
var result=Object.keys(obj).reduce(函数(r,e){
if(obj[e]%2)r.push(数字(e));
返回r;
}, []);

console.log(结果)
以下是ECMAScript 2015解决方案:

var myArray=[5,4,1,2,1,4,5,6,7,8,9,10,1,2,1,5,3,2];
var count=myArray.reduce((count,num)=>
(count[num]=(count[num]| | 0)+1,count),{});
myArray=Object.keys(count).filter(num=>count[num]%2).map(Number);

log(myArray)这是另一种方法,它通过从排序后的lastIndexOf键中减去indexOf键来检查奇数个元素:

var myArray=[5,4,1,2,1,4,5,6,7,8,9,10,1,2,1,5,3,2];
var result=myArray.sort().filter(函数(键,idx){
返回myArray.indexOf(key)==idx&&//仅处理第一个实例
(myArray.lastIndexOf(键)-myArray.indexOf(键))%2==0;
});

控制台日志(结果)不希望1在输出中出现一次吗?您在迭代数组时正在修改它;这将导致一些不稳定的行为。考虑使用一个线性项<代码>数组(从新集合(MyLaar));<代码>标题中的模是从哪里来的?你想要所有的值都显示奇数次,包括一次吗?它工作了,我现在看到了。我在代码中犯了很多错误,谢谢。很好的解决方案,现在我知道如何解决类似的问题了,谢谢。