将数组缩减为非唯一元素
Reduce an Array down to its non-unique elements
我正在尝试创建一个函数,它接收一个数组和 returns 一个没有唯一元素的新数组,例如:
nonUniqueElements([1, 2, 3, 1, 3])
// Result: [1, 3, 1, 3]
我尝试用两个 for
循环来做,但没有成功。
您可以使用indexOf
和lastIndexOf
来过滤不唯一的元素。如果这两个 indexOf
和 lastIndexOf
return 中的一个索引与当前元素的索引不同,那么它不是唯一的。 注意 indexOf
和 lastIndexOf
不能 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]*/
我正在尝试创建一个函数,它接收一个数组和 returns 一个没有唯一元素的新数组,例如:
nonUniqueElements([1, 2, 3, 1, 3])
// Result: [1, 3, 1, 3]
我尝试用两个 for
循环来做,但没有成功。
您可以使用indexOf
和lastIndexOf
来过滤不唯一的元素。如果这两个 indexOf
和 lastIndexOf
return 中的一个索引与当前元素的索引不同,那么它不是唯一的。 注意 indexOf
和 lastIndexOf
不能 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]*/