在 Chrome 中使用 Array.prototype.sort 时数组的奇怪排序

2023-12-04

我在使用时发现了一个奇怪的现象Array.prototype.sort()在一系列数字上,我不确定是什么原因造成的。

我的目标是使用反转数组sort(不使用reverse)所以我可以像这样链接它:

const shouldReverse = Math.random() > 0.5,
      result = foo().bar().map(...).reverseIf(shouldReverse);

我相信我应该能够使用来实现这一目标sort,这似乎在某些情况下有效,但在其他情况下则无效。

这是一个工作示例:

const myArray = ['a', 'b', 'c', 'd'],
      mySortedArray = myArray.sort(() => 1); 

console.log(mySortedArray);
["d", "c", "b", "a"]

还有一个不起作用的例子:

const myArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k'],
      mySortedArray = myArray.sort(() => 1); 

console.log(mySortedArray);
["f", "k", "a", "j", "i", "h", "g", "b", "e", "d", "c"]

这种情况仅在 Chrome 中发生,并且仅当数组中的元素超过 10 个时才会发生 - 这可能是 Chrome V8 引擎中某种形式的优化吗?


我相信我应该能够使用来实现这一目标sort

不,你不应该。您正在寻找reverse.

对于已经按升序排序的特定示例,您可以通过传递导致降序的比较函数来实现反转,但这不适用于具有任意值的任意数组。

myArray.sort((a, b) => (a<b)-(b<a));
myArray.sort(() => 1)

那是一个完全不一致的比较函数。你不能指望这会起作用。

这只发生在 Chrome 中,并且仅当数组中的元素超过 10 个时才会发生

这是因为 Chrome 中的 JS 引擎对小数组使用不同的排序算法,它以不同的顺序进行比较,并且显然总是与第二个参数中索引较高的项目进行比较。你只是很幸运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Chrome 中使用 Array.prototype.sort 时数组的奇怪排序 的相关文章

  • setTimeout 用于加载下拉列表中的项目

    我在用setTimeout克服 中提到的缓慢处理脚本警告 禁用 Internet Explorer 中的长时间运行脚本消息 https stackoverflow com questions 4460263 disabling the lo
  • ES6 类文字中的 IIFE

    在 ES5 中我们都可以这样做 myClass prototype myMethod function return function 我可以对 ES6 类文字执行同样的操作吗 不 至少现在还没有 ES6 类仅支持声明方法 因此任何不直接为
  • Javascript 无法正确排序 DECIMAL 数字

    我有一些代码可以按字母顺序对名称进行排序 我遇到的问题是它处理小数的方式 它对名称进行排序 如下所示 我宁愿它按数字递增 DOG 1 0510 DOG 1 1031 DOG 11 1792 DOG 12 0920 DOG 12 1170 D
  • 使用 TreeMap 和 Comparator 按值对 HashMap 进行排序

    我使用以下代码创建哈希图 然后使用树形图和比较器对哈希图中的值进行排序 然而 输出结果却出乎意料 所以任何关于我做错了什么的想法都会有帮助 Code public static void main String args System ou
  • Cordova SQLite 保存 BLOB

    我的 Cordova SQLite 插件有问题 如何将 BLOB 图像保存到 SQLite 我在 JS 中有 BLOB 对象 Blob size 96874 type image jpeg proto Blob length 1 我试图拯救
  • 从 ES6 模块导入函数表达式或函数声明有什么区别?

    据我了解 参见第 16 3 2 1 节 http exploringjs com es6 ch modules html ES6 允许函数 类导出操作数使用不同的语法 区别在于导出的函数是否需要在导入时解释为函数声明 在这种情况下 您可以编
  • 如何将节点 sqlite3 与 q (promise) 一起使用

    我正在尝试将 Promise 与 sqlite3 一起使用 这是我的源代码的一部分 this deleteTag function tag project var db this db if project return q nfcall
  • 光标:IE 8 和 9 中的自动行为

    我想要的是为整个正文标记指定cursor pointer 这样页面的背景是可点击的 但我也希望页面的其余部分像以前一样工作 所以我尝试为div设置cursor auto 其中包含这一页 在 FF Chrome 和 safari 中 它工作得
  • 如何显示/隐藏jsf组件

    在我的一个 JSF 应用程序中 顶部的标题部分包含 selectOneMenu 底部的内容部分显示过滤器组件 默认情况下 应用程序首先在顶部显示 selectOneMenu 数据 在底部显示相应的 Filter 信息 如果用户选择不同的se
  • Chrome 跨域 PATCH 请求不起作用

    我有一个带有 REST Api 的网站 现在我正在创建一个浏览器扩展 它将从某些页面收集数据并将它们发送回 REST Api 因为我希望我的扩展能够与 Firefox 和 Chrome 兼容 并且易于维护 所以我将实际代码作为脚本标记注入到
  • 预加载 javascript 和 css 文件

    我目前正在开发一个移动网站 该网站大量使用图像 CSS 和 JavaScript 例如 它使用未压缩的 150KB 的库 我为图像构建了一个预加载器 效果相当好 function loadImages images var sum 0 fo
  • dc lineChart 单击时弹出数据点信息

    我正在尝试检测折线图数据点上的点击 Per this answer dc scatter plot binding onClick event https stackoverflow com a 22772340 1873386 I am
  • Webpack - 资产大小限制中的警告:以下资产超出了建议的大小限制 (244 KiB)

    当我在生产模式下运行 webpack 时 有资产规模限制 超出 的警告 我怎样才能运行而不出现这个错误 在我的项目中 我包含 css 并且我看到 webpack 构建中包含一些 node module 目录 但是如果我排除 css 的 no
  • 如何将OpenLayers多边形坐标转换为纬度和经度?

    我正在使用开放层 https openlayers org en latest examples draw freehand html绘制多边形并保存坐标的技术 这是我的代码 var raster new ol layer Tile sou
  • FullCalendar:如何重新创建/重新初始化 FullCalendar 或批量添加多个事件

    我正在尝试将新事件批量添加到日历中 但未能找到方便的使用方法 所以我决定用新的事件数组重新初始化视图 所以我尝试了以下方法 var events title Event start new Date y m d 10 description
  • jQuery 模板插件:如何创建双向绑定?

    我开始使用 jQuery 模板插件 微软创建的 但现在我面临这个问题 模板用于绑定到对象数组的一堆表单 当我更改其中一个表单上的某些内容时 我希望更新绑定的对象 但我不知道如何自动执行该操作 这是一个简单的例子 现实生活中的模板和对象要复杂
  • Dojo“正在加载”消息

    我是 Dojo 新手 所以我需要一些帮助 我的一些链接需要一段时间 当用户单击时 页面开始加载需要几秒钟 我想添加一条 正在加载 消息 我可以用 旧时尚方式 来做 但我想学习新的 更简单 更智能的 Dojo 方式 具体如何工作现在并不重要
  • 除非打开开发人员工具,否则 IE8 Javascript 无法运行?

    由于某种原因 在 IE8 中 除非我在打开开发工具的情况下重新加载页面 否则 javascript 不会运行 我关闭开发人员工具并重新加载页面 然后 javascript 停止工作 我没有收到任何错误报告 无论如何它们也没有任何用处 还有其
  • React Router Tabs——保持组件安装

    我使用 React Router 创建了选项卡 每个选项卡都有不同的路线 但是 我想通过保持隐藏选项卡的安装来维护选项卡转换之间的选项卡状态 我该如何实现这一目标 每次路由切换时 React 路由器都会重新安装每个组件 已经有人问过这个问题
  • 引导网格中的绘图图周围有巨大的空白

    我有一个 Net 应用程序 我试图在其中使用创建一个图表bootstrap js and plotly js 当我创建响应式图表时 我遇到网格中存在巨大空白的问题 我发现问题的一部分是plotly svg container的大小默认高度为

随机推荐

  • 如何在提交时自动更新 git 标签 --amend

    If I do git commit amend对于标记的提交 标记将消失 我需要删除原来的标签并重新添加 有什么办法可以将原来的标签移动到新的提交吗 不能直接绑定创建一个新的提交 amend 和一个标签 其中仍然引用原始提交 您需要移动标
  • PHP - 以相同的方式对两个数组进行排序

    我有两个不同的数组 一个数组 a 用于人员列表 我的另一个数组 b 用于列出他们的年龄 我先按数字对 b 进行排序 然后将其反转 以便按降序排列 我顺利完成了这部分 如何对 a 人员姓名列表 进行排序 以便相同的值仍然与排序列表配对 Exa
  • 检查浏览器是否支持 JavaScript 中的 document.querySelectorAll

    现在虽然大多数现代浏览器都支持document querySelectorAll 您可能会在使用旧版本的 Internet Explorer 时遇到问题 检查浏览器是否支持某个功能的明显方法是 if document querySelect
  • 配置不允许连接到 http://packagist.org/packages.json

    我正在尝试在我的电脑上安装 laravel 我指的是图罗铁路点laravel 安装教程 安装 Composer 后尝试创建新的 Laravel 项目但出现此错误 这是我收到的错误 我有同样的问题 但后来我尝试这样做 composer con
  • 将顶点缓冲区转换为顶点数组

    我正在研究 OpenGL 程序 我必须计算一个边界框 我编写了代码来执行此操作 但无法从 vertex buffer 获取顶点坐标 有人可以向我解释一种从顶点缓冲区获取数据的简单方法吗 我正在使用 Java for android 和 Op
  • “或”条件导致“if”出现问题

    我遇到了问题or函数中的条件 这if语句不断评估为True无论什么价值choice是 当我删除or the if工作正常 def chooseDim choice input Do you need to find radius or ar
  • 套接字、Unix 域 UDP C++ recvfrom 无法填充源地址

    我正在尝试使用 UDP 在 C 中的 Android 上创建 unix 域套接字服务器和客户端 我需要客户端向服务器发送一条消息 hi 然后服务器需要从那里向客户端发送数据 我已经成功创建了双方的套接字 并且我能够在服务器上接收来自客户端的
  • 将函数指针传递给函数时处理<未解析的重载函数类型>

    让我们考虑一下 void goo std cout lt lt void goo n int goo int std cout lt lt int goo int n return 42 现在我想使用如下定义的包装函数来调用这些函数之一 t
  • 当 CakePHP 表单中的字段属于 hasMany 关联时,如何“解锁”该字段

    我有一个表格代表RewardModifier我们数据库中的表 那RewardModifier hasMany RewardOption 我的表格结构如下 图片 So the RewardModifier页面上可以有很多元素 每个元素有很多R
  • 具有返回问题的求和的所有路径

    我有一个问题 如何找到总和的所有路径 问题是 给定一棵二叉树和一个数字 S 找到从根到叶的所有路径 使得每条路径的所有节点值之和等于 S 我的递归方法是 def all sum path root target result find su
  • jQuery UI 对话框 - 关闭事件时出现问题

    当我关闭 jQuery UI 对话框时 我尝试执行特定操作 这是我的代码的简化版本 a open trigger click function var test hello dialog dialog bgiframe true dialo
  • 法师注册表项“_singleton/VladimirPopov_WebForms_Model_Observer”已存在

    我已经从扩展中卸载了 web 并再次安装了它 因为当我尝试打开管理时收到此错误 前端工作正常 请帮忙 清除编译器缓存并在 Magento 后端将其打开非常重要 清除缓存 SSH find var cache type f delete FT
  • 插入图像sqlite

    我有一些图片 我想将其存储在 sqlite 中 我需要做什么 有两种思想流派 将它们放入目录中 然后将路径存储在文本字段中 将图像数据存储在 blob 字段中 如果数据库很大并且图像也很大 那么文件系统方式的性能更高 如果您只想快速完成某件
  • 获取此实例的名称

    这可能吗 我正在尝试创建一组模拟许多不同类型事物的类 这些东西的属性随着时间的推移而改变 我希望我的代码易于维护 所以我想做如下的事情 public class Cat public string CatName get set publi
  • 如何在android中获取指针/光标位置

    在Android中 当我单击屏幕上的任意位置时 我想获取 返回光标位置 纬度和经度 我不知道你想要获取什么纬度和经度 但我确信你可以获得坐标的位置X and Y当用户触摸屏幕时 实施OnTouchListener在你的Activity并设置
  • 如何安装libpq-fe.h?

    我一生都无法弄清楚这一点 When I pip install django tenant schemas它尝试安装依赖项psycopg2这需要 Python 头文件和 gcc 我已经安装了所有这些 但仍然收到此错误 psycopg psy
  • 获取一年中每一天的所有完整小时数

    我需要在给定年份的每一天的每个整小时在命令行上获取 打印 例如2011 年 但我正在努力用 Java 编写它 有人编码过这个问题吗 这应该有效 final DateFormat df DateFormat getDateTimeInstan
  • 具有不同限制的轴的方形主/副网格

    我有一个带有背景网格的图 我需要网格单元是方形的 主要网格单元和次网格单元 即使 X 轴和 Y 轴的限制不同 我当前的代码如下 import matplotlib pyplot as plt import matplotlib ticker
  • 我可以将新的 spring 3.2 与旧的 spring-security 3.0 一起使用吗

    我想升级Spring框架从 3 0 到 3 2 但想跳过升级弹簧安全一阵子 我可以将新的 spring 3 2 与旧的 spring security 3 0 一起使用吗 使用的 Spring 模块有 spring core spring
  • 在 Chrome 中使用 Array.prototype.sort 时数组的奇怪排序

    我在使用时发现了一个奇怪的现象Array prototype sort 在一系列数字上 我不确定是什么原因造成的 我的目标是使用反转数组sort 不使用reverse 所以我可以像这样链接它 const shouldReverse Math