将数组缩减为非唯一元素

Reduce an Array down to its non-unique elements

我正在尝试创建一个函数,它接收一个数组和 returns 一个没有唯一元素的新数组,例如:

nonUniqueElements([1, 2, 3, 1, 3])
// Result: [1, 3, 1, 3]

我尝试用两个 for 循环来做,但没有成功。

您可以使用indexOflastIndexOf来过滤不唯一的元素。如果这两个 indexOflastIndexOf return 中的一个索引与当前元素的索引不同,那么它不是唯一的。 注意 indexOflastIndexOf 不能 return -1 因为至少有一个元素等于当前元素数组。

var arr = [1, 4, 2, 2, 1, 5, 2, 4, 3];

var result = arr.filter(function(e, i){
  return arr.indexOf(e) != arr.lastIndexOf(e);
});

console.log(result);

如果你需要用 2 个循环来做,那么像这样吗?

var test = [1, 2, 'A', 3, 'C', 1, 'A', 3, 'D', 'A'];
var result = count_occurrences_limit(test, 1);

function count_occurrences_limit(arr, limit) {
    var objs_count = {};
    for (var i = 0, j = arr.length; i < j; i++) {
        objs_count [arr[i]] = (objs_count [arr[i]] || 0) + 1;
    }
    var final_reduced = [];
    for (vari in objs_count) {
        if (objs_count[vari] > limit) {
            final_reduced[vari] = objs_count[vari];
        }
    }
    return final_reduced;
}

/*[1: 2, 3: 2, A: 3]*/