将数组缩减为非唯一元素

时间:2017-01-30 00:35:00

标签: javascript arrays reduce

我试图创建一个接收数组并返回没有唯一元素的新数组的函数,例如:

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

我尝试使用两个for循环但没有成功。

2 个答案:

答案 0 :(得分:0)

您可以使用indexOflastIndexOf过滤不唯一的元素。如果这两个indexOflastIndexOf中的一个返回的索引与当前元素的索引不同,那么它不是唯一的。 请注意 indexOflastIndexOf无法返回-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);




答案 1 :(得分:0)

如果您需要使用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]*/