javascript - 获取数组中计数为偶数或计数大于2的元素

标签 javascript arrays

我正在尝试获取数组中计数为偶数的元素,我有以下代码。 假设我检查这个数组:

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/

相关文章:

javascript - 获取乒乓球比赛的关键数字时,无法读取未定义的属性 'keyCode'

jquery - 将 Div 滚动到底部时从服务器加载数据

java - 如何查找以用户输入的字母开头的名称?

arrays - 根据空行或任何未使用的字符将文本文件拆分为数组

c - 对数组的 int 操作数进行按位异或运算

javascript - 在克隆带有文本框的 html 行时,触发新文本框

javascript - 获取 "object HTMLInputElement"的值和函数错误

c++ - 忽略大小模板的 std::array::iterator

r - 比较 R 中多个数据帧的唯一值

Javascript 搜索 LocalStorage 变量是否存在