javascript排序稀疏数组保留索引

2024-04-06

对稀疏数组进行排序并使元素保持相同索引的最佳方法是什么? 例如:

a[0] = 3, 
a[1] = 2, 
a[2] = 6,
a[7] = 4,
a[8] = 5,

我想排序后有

a[0] = 2, 
a[1] = 3, 
a[2] = 4, 
a[7] = 5, 
a[8] = 6.

这是一种方法。它将定义的数组元素复制到新数组并保存它们的索引。它对新数组进行排序,然后将排序后的结果放回到以前使用的索引中。

var a = [];
a[0] = 3;
a[1] = 2; 
a[2] = 6; 
a[7] = 4; 
a[8] = 5;


// sortFn is optional array sort callback function, 
// defaults to numeric sort if not passed
function sortSparseArray(arr, sortFn) {
    var tempArr = [], indexes = [];
    for (var i = 0; i < arr.length; i++) {
        // find all array elements that are not undefined
        if (arr[i] !== undefined) {
            tempArr.push(arr[i]);    // save value
            indexes.push(i);         // save index
        }
    }
    // sort values (numeric sort by default)
    if (!sortFn) {
        sortFn = function(a,b) {
            return(a - b);
        }
    }
    tempArr.sort(sortFn);
    // put sorted values back into the indexes in the original array that were used
    for (var i = 0; i < indexes.length; i++) {
        arr[indexes[i]] = tempArr[i];
    }
    return(arr);
}

工作演示:http://jsfiddle.net/jfriend00/3ank4/ http://jsfiddle.net/jfriend00/3ank4/

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

javascript排序稀疏数组保留索引 的相关文章

随机推荐

  • 当服务器抛出异常时如何避免用户收到 500 错误

    我的服务器日志中出现以下错误 2012 03 06 09 20 43 HTTP JVM CLFAD0211E 引发异常 有关更详细的信息 请查阅位于 D Lotus Domino data domino workspace logs 的 e
  • 监听添加的表行

    假设我有一张桌子 table tr tr table function btn click function table append
  • 使用 ASP.NET 将 HTML 表导出到 Excel

    I have an html table Not Gridview and that has no proper Header and rows Instead it has customized structure and data I
  • 如何在 Next.js 中设置 i18n 翻译的 URL 路由?

    我在用Next js i18n 路由 https nextjs org docs advanced features i18n routing设置多语言网站 这非常有效 如果我创建一个文件 pages about js这将根据我的区域设置创
  • 将两个具有不同数据点的散点图组合起来

    我有一个要求 我想在同一绘图区域中组合两个不同的散点图 一个散点图使用指标 1 另一张散点图使用指标 2 在R中可行吗 我已经添加了数据集和代码 但不知道如何将这两个合并在同一个图中 df1 lt data frame Product c
  • 在 Centos7 上使用 SQLite3 与 Django 2.2 和 Python 3.6.7

    我正在将 Django 代码从 2 1 7 直接移至新的 Django 2 2 我在 Centos7 开发环境中遇到的唯一问题是我的本地开发数据库 sqlite3 版本与我的 Python 3 6 7 不兼容 我从 manage py ru
  • 在此范围内未声明“GL_CLAMP_TO_EDGE”

    我该如何解决 我已经包含了 gl gl h 和 gl glu h 那么有什么作用呢 它是 OpenGL 1 2 的一部分 这就是为什么它不在 Microsoft 的 OpenGL 1 1 标头中 将此行添加到您的代码中的某个位置 顺便说一句
  • 具有多个视图集的 Django Rest Framework 路由器

    我正在尝试使用 DRF 3 1 创建 API 我首先使用 ModelViewSet 创建管理函数 并将它们注册到 DefaultRouter 这工作得很好 默认的 API 根视图在浏览器中查看时会生成适当的链接 然后 我使用 ReadOnl
  • 选择 pandas 数据框中所有零条目的列

    给定一个数据框df 如何找出所有只有0作为值的列 0 1 2 3 4 5 6 7 0 0 0 0 1 0 0 1 0 1 1 1 0 0 0 1 1 1 预期产出 2 4 0 0 0 1 0 0 我只需将这些值与 0 进行比较并使用 all
  • 选择要显示的随机图像

    我有一个包含 4 张图像的页面 我希望每次查看页面时都从图像选择中随机选择这些图像 图像还需要链接到特定页面 取决于显示的图像 例如 image 01 page 620 html image 04 page 154 html HTML di
  • 动态加载模块的租户特定路由

    我正在使用 ASP NET MVC 开发应用程序框架 本质上 最终目标是能够登录管理界面 创建具有自定义设置的新租户 启用他们想要的模块 博客 购物篮等 工作完成 客户对新网站感到满意 我没有使用单独的应用程序 因为会有很多共享代码 这样维
  • 当文件没有扩展名时,如何告诉 RubyMine 文件类型?

    这看起来应该很容易 我正在创建一个 CLI 命令 gem 所以命令位于bin gem name其中没有 rb扩大 当我尝试在 RubyMine 中编辑该文件时 它没有为其提供语言模式 抱歉 不知道正确的术语 来使语法突出显示和 RubyMi
  • 如何使用现有的 Display 特征实现来实现 Serialize?

    我希望实施Serialize外部板条箱中类型的特征 但这是禁止的 我看了 serde 的远程导出 https serde rs remote derive html 但重写类型似乎需要做很多工作 就我而言 我希望序列化的所有类型都实现了Di
  • JavaScript 中的简单金融利率函数

    我正在寻找一个简单的 javascript 金融 RATE 函数 我找到了这个 但似乎太难理解了 我想简化这个功能 需要你的帮助 如果有人有最简单的功能 请回答 这是一个等效的 Excel RATE 函数 var rate function
  • 使用 .htaccess 阻止对文件和子目录的访问?

    我的目录中有近30个php文件 4个子目录 我想阻止用户直接查看一些 php 文件和子目录 例如http bhavani com hai php 我现在的htaccess file Enable Mod Rewrite this is on
  • Node.js HTTP 请求返回 2 个块(数据体)

    我试图通过 node js 中的 HTTP 请求获取 HTML 文件的源 我的问题是它返回数据两次 这是我的代码 var req http request options function res res setEncoding utf8
  • EUID 和 UID 之间的区别?

    EUID不等于UID 脚本中这两者在什么上下文中使用 我试图通过以下方式获取值echo UID is UID and EUID is EUID 但只有空间作为输出 我的机器运行 Ubuntu 12 04 LTS 在一些网站上看到 这通常用于
  • 在 Android 设备上使用 HTTP Post 将数据放入 Google App Engine Blobstore

    我正在尝试将数据发布到谷歌应用程序引擎上的Blob Store 此代码运行时不会抛出任何异常 但在blobstore端根本没有关于发布请求的日志 当我使用表单 尽管带有 mime 数据 发布时 服务器端的东西就可以工作 我已经允许我的 An
  • Laravel:错误 [PDOException]:无法在 MySQL 中找到驱动程序

    我正在尝试在我的中保存一个寄存器MySQL数据库使用Eloquent of Laravel 5 我编辑了数据库信息 env文件 本地化在我的系统根路径中 并在config database php维持 default gt mysql 和其
  • javascript排序稀疏数组保留索引

    对稀疏数组进行排序并使元素保持相同索引的最佳方法是什么 例如 a 0 3 a 1 2 a 2 6 a 7 4 a 8 5 我想排序后有 a 0 2 a 1 3 a 2 4 a 7 5 a 8 6 这是一种方法 它将定义的数组元素复制到新数组