【问题标题】:How do i find the unique number in an array?如何在数组中找到唯一编号?
【发布时间】:2021-08-08 02:00:39
【问题描述】:

我不知道为什么这不起作用。该解决方案基本上与我的完全相反,但是那个解决方案以某种方式起作用(它检查了前两个索引而不是最后两个索引)。我错过了什么吗?

function findUniq(arr) {
  arr.sort((a, b) => a - b);
  return arr.slice(-2) === arr.pop() ? arr.shift() : arr.pop();
}

console.log(findUniq([0, 1, 0])); // 0, and arr is [0]

【问题讨论】:

  • 我已将 slice(-2) 更改为 slice(-2, -1)。但由于某种原因,arr 现在是 [0]。你知道为什么吗?
  • 因为pop 正在从数组中删除元素。

标签: javascript arrays sorting


【解决方案1】:

这是发生了什么:

arr.sort((a, b) => a - b);

将数组排序为:

[0, 0, 1]

在返回表达式中:

arr.slice(-2) === arr.pop()

解决如下:

arr.slice(-2)

返回一个数组,它是数组最后两个元素的浅拷贝。那么

arr.pop()

从数组中删除最后一个元素并返回它的值,所以数组现在是[0, 0],表达式解析为:

[0, 1] === 1

这是错误的。 arr.slice(...) 与任何事物的严格比较总是错误的,即使 arr.slice(-2) === arr.slice(-2) 是错误的,因为它比较了两个不同的对象,尽管它们具有相同的元素和相同的值。

所以conditional operator ?:表达式的假分支被执行:

arr.pop();

解决:

[0, 0].pop()

arr 中删除并返回最后一个元素,因此返回 0 并且 arr 现在是 [0]

另见:

  1. MDN: Array.prototype.slice
  2. MDN: Array.prototype.pop

【讨论】:

  • 哇,谢谢你让我意识到我的错误!感谢您花时间帮助我:)
  • @asoupling 如果对您有帮助,您可以通过单击复选标记将此答案标记为“已接受”:D
猜你喜欢
  • 2016-11-08
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2018-04-12
相关资源
最近更新 更多