如何删除javascript数组中的配对元素?

时间:2015-11-09 19:24:20

标签: javascript arrays

这个问题看起来可能与[ ] [1] Remove Duplicates from JavaScript Array, 但它确实不同: 我需要在数组中找到相同的元素并将它们全部删除,例如

var arr1 = ["andesite", "grass", "dirt", "pink wool", "dead shrub", "grass"];

结果必须是:

var arr1 = ["andesite", "dirt", "pink wool", "dead shrub"];

我想要的是发现“草”在那里两次,并从阵列中排除两者。 我尝试过像

这样的东西
function inArray(arr){
var index = [];
var count = arr.length;
for(var i=0;i<count;i++){

    if(arr[i] in index){

        arr.splice([i],1);          

        }else{
            index1.push(arr[i]);
        }
    }
return arr;

} 但是当它与第一个重复元素进行比较时,它只删除第二个重复元素。

提前感谢您的任何回复。这对我来说是一项教育任务,因此,我将非常感谢其解释如何运作。

1 个答案:

答案 0 :(得分:2)

好的,所以第一步当然要确定要删除哪些元素。第二步是删除它们。

识别重复项很容易,可以通过多种方式完成。我就是这样做的:

var counts = {};
for( var i=0, l=arr.length; i<l; i++) {
    counts[arr[i]] = (counts[arr[i]] || 0) + 1;
}

counts中任何值大于1的密钥现在都需要删除。这也很简单:

var result = arr.filter(function(item) {
    return counts[item] <= 1;
});

而且......完成了!这将过滤掉counts[item] <= 1失败的所有项目,有效删除出现两次或更多次的项目。就这么简单^^