我有一个数组

var aos = ["a","a","a","b","b","c","d","d"];


我想知道,如果它在数组中找到2个或更多相同值,是否只能删除1个项目。因此,例如,如果发现

"a", "a"

它将删除其中一个“ a”

这是我当前的代码:

var intDennis = 1;
                        for (var i = 0; i < aos.length; i++) {
                            while (aos[i] == aos[intDennis]) {
                                aos.splice(i, 1);
                                intDennis++;
                                console.log(aos[intDennis], aos[i]);
                            }
                            intDennis = 1;
                        }


注意:我的数组已排序。

最佳答案

在更好地了解OP用例之后进行了编辑。
更新了解决方案和提琴测试,以将pst的建议纳入注释中。

(并非没有,但是此方法不需要对原始数组进行排序。)

尝试这个...

var elements = [];
var temp = {};
for (i=0; i<aos.length; i++) {
    temp[aos[i]] = (temp[aos[i]] || 0) + 1;
}
for (var x in temp) {
    elements.push(x);
    for (i=0; i<temp[x]-2; i++) {
        elements.push(x);
    }
}


Fiddle Test

09-26 17:29