我正在尝试获取数组中计数为偶数的元素,我有以下代码。 假设我检查这个数组:
function checkEither(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
var count = 0;
for (var j = 0; j < arr.length; j++) {
if (arr[j] == arr[i]) {
count++;
}
}
if ((count >= 3) || (count % 2 == 0)) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(checkEither([10, 11, 12, 11, 10, 10, 13, 11, 12, 10, 13, 14, 11, 10, 12]));
我明白了
[ 10, 11, 12, 11, 10, 10, 13, 11, 12, 10, 13, 11, 10, 12 ]
而不是
[ 10, 11, 12, 11, 10, 10, 13, 11, 12, 10, 13, 11 ]
数组应仍包含出现奇数次的项目,但结果应显示该项目的偶数数量
10
出现了五次,在新数组中应该只出现四次。我该怎么办?谢谢
最佳答案
这一行是问题所在:
if ((count >= 3) || (count % 2 == 0)) {
这表示如果条目的计数大于或等于 3 或其计数为偶数,则包含该条目。因此,如果计数为 5,则它符合第一个条件并被包含在内。
如果您只想计算偶数,请删除第一个条件:
if (count % 2 == 0) {
10 不会出现在结果中,因为它出现了 5 次。
实例:
function checkEither(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
var count = 0;
for (var j = 0; j < arr.length; j++) {
if (arr[j] == arr[i]) {
count++;
}
}
if (count % 2 == 0) {
newArr.push(arr[i]);
}
}
return newArr;
}
console.log(checkEither([10, 11, 12, 11, 10, 10, 13, 11, 12, 10, 13, 14, 11, 10, 12]));
如果您还希望结果仅包含每个数字一次,而不是重复,则需要检查它是否已在结果数组中,请参阅 ***
行:
function checkEither(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (!newArr.includes(arr[i])) { // ***
var count = 0;
for (var j = 0; j < arr.length; j++) {
if (arr[j] == arr[i]) {
count++;
}
}
if (count % 2 == 0) {
newArr.push(arr[i]);
}
}
}
return newArr;
}
console.log(checkEither([10, 11, 12, 11, 10, 10, 13, 11, 12, 10, 13, 14, 11, 10, 12]));
这涉及重新扫描 newArr
每次,这对于小型数组(例如问题中的数组)甚至中型数组来说绝对没问题。对于非常大的数组,您可能希望跟踪 Set
中的已知数字。 (或者如果您必须支持过时的平台,则反对),因为查找时间比 Set
的线性要好。 :
function checkEither(arr) {
var checked = new Set(); // ***
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (!checked.has(arr[i])) { // ***
var count = 0;
for (var j = 0; j < arr.length; j++) {
if (arr[j] == arr[i]) {
count++;
}
}
if (count % 2 == 0) {
newArr.push(arr[i]);
checked.add(arr[i]); // ***
}
}
}
return newArr;
}
console.log(checkEither([10, 11, 12, 11, 10, 10, 13, 11, 12, 10, 13, 14, 11, 10, 12]));
关于javascript - 获取数组中计数为偶数或计数大于2的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54827409/