javascript - 数组中元素的奇数个

标签 javascript arrays sorting numbers

当试图弄清楚如何获取数组的中值时,我首先想弄清楚数组中元素的数量是奇数还是偶数。

  • 如果数字是奇数,那么控制台将记录中间的元素。
  • 如果有偶数个元素,我希望控制台记录“不是奇数个数字”。

我确信有更简单的方法来获取数组的中位数,但我想自己弄清楚。现在我只需要帮助,为什么控制台在我对数组的第二次测试中记录数字 1,即使该数组中有偶数个元素?它在第一次和第三次测试中运行良好,但在第二次测试中却不行...为什么?

function median (arr) {
  let sorted = arr.sort((a, b) => a-b)
  let midIndex = sorted.splice(0, sorted.length / 2)
  if (arr.length %2 != 0) {
    return midIndex[midIndex.length-1]
  } else {
    return "Not an odd number of numbers"
  }
  
}

try {
  let result = median([4, 8, 2, 4, 5])
  console.log(result)                   // -> 4

  result = median([-5, 1, 5, 2, 4, 1])  // -> 1
  console.log(result)

  result = median([5, 1, 1, 1, 3, -2, 2, 5, 7, 4, 5, 6])  // -> Not an odd number of numbers
  console.log(result)
} catch (e) {
  console.error(e.message)
}

最佳答案

因为 splice 实际上改变了原始 数组的长度 - 它不会创建新数组。您可以通过记下 before 调用 splice

的长度来查看这一点

function median (arr) {
  var initLength = arr.length;
  let sorted = arr.sort((a, b) => a-b)
  let midIndex = sorted.splice(0, sorted.length / 2)
  console.log(initLength, arr.length);
  if (arr.length %2 != 0) {
    return midIndex[midIndex.length-1]
  } else {
    return "Not an odd number of numbers"
  }
  
}

try {
  let result = median([4, 8, 2, 4, 5])
  //console.log(result)                   // -> 4

  result = median([-5, 1, 5, 2, 4, 1])  // -> 1
  //console.log(result)

  result = median([5, 1, 1, 1, 3, -2, 2, 5, 7, 4, 5, 6])  // -> Not an odd number of numbers
  //console.log(result)
} catch (e) {
  console.error(e.message)
}

所以将 6 的数组拼接成两半得到的长度为 3,这是奇数。而是使用原始数组长度,它会按照您的预期进行:

function median (arr) {
  var initLength = arr.length;
  let sorted = arr.sort((a, b) => a-b)
  let midIndex = sorted.splice(0, sorted.length / 2)
  if (initLength %2 != 0) {
    return midIndex[midIndex.length-1]
  } else {
    return "Not an odd number of numbers"
  }
  
}

try {
  let result = median([4, 8, 2, 4, 5])
  console.log(result)                   // -> 4

  result = median([-5, 1, 5, 2, 4, 1])  // -> 1
  console.log(result)

  result = median([5, 1, 1, 1, 3, -2, 2, 5, 7, 4, 5, 6])  // -> Not an odd number of numbers
  console.log(result)
} catch (e) {
  console.error(e.message)
}

关于javascript - 数组中元素的奇数个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64007572/

相关文章:

r - 如何通过另一个变量对 data.frame 的列进行排序

javascript - 基于java脚本变量动态改变html的header标签

javascript - React-Redux 操作没有被触发

javascript - 随机化并在页面加载时显示给定数量的元素

python - Python 中通过其他数组排序索引对数组进行排序

java - 链表排序方法在递归和比较列表中的元素时给出 StackOverFlow 错误

javascript - JS日期格式及日期比较

java - 从字符串构造 JSONArray 时出错

c - 将数字输出写入数组

javascript - 如何使用 1 个文本框在空数组中添加 5 个数字?