按值对对象进行排序

2023-12-10

我在使用 Underscore 时遇到困难。我想按以下对象的值按字母顺序对它进行排序,并以相同的格式返回它。

{
  "accommodation" : "Accommodation",
  "bed-breakfast" : "Bed & Breakfast",
  "caravan-camping" : "Caravan & Camping",
  "cottages" : "Cottages",
  "friends-family" : "Friends & Family",
  "health-spas" : "Health Spas",
  "hostels" : "Hostels",
  "hotels" : "Hotels",
  "self-catering" : "Self Catering",
  "backpacking" : "Backpacking",
  "car-touring" : "Car Touring"
}

我已经设法对它进行排序,但它用索引值替换了键。有任何想法吗?这应该是相当简单的。我缺少什么?

提前致谢!


您无法可靠地对 JavaScript 对象进行排序。ES5 第 12.6.4 节 says:

枚举属性的机制和顺序(第一个算法中的步骤 6.a,第二个算法中的步骤 7.a)未指定。

Section 15.2.3.7 says:

如果实现为 for-in 语句定义了特定的枚举顺序,则必须使用相同的枚举顺序来对该算法的步骤 3 中的列表元素进行排序。

第15.2.3.14节 (Object.keys) says:

如果实现为 for-in 语句定义了特定的枚举顺序,则必须在此算法的步骤 5 中使用相同的枚举顺序。

您还可以查看部分8.6 对象类型查看是否有提及属性顺序(提示:没有)。因此,在 ES5 中,属性顺序是依赖于实现的,唯一的限制或多或少是,如果在任何地方都有定义的顺序,那么该顺序必须在任何地方都相同。

ES6 草案包含类似的语言第9.1.11节:

枚举属性的机制和顺序未指定,但必须符合下面指定的规则。

因此,对象中的事物绝对不存在可移植且可靠的顺序。

不,你也不能通过 JSON 作为JSON 将对象定义为:

...一组无序的名称/值对

一些 JavaScript 实现将按插入顺序对对象进行排序,但您不能依赖于此。

您能做的最好的事情就是将您的对象转换为数组数组,如下所示:

var sorted = _(obj).chain()
                   .pairs()
                   .sortBy(_.last)
                   .value();

或对象数组:

var sorted2 = _(obj).chain()
                    .pairs()
                    .sortBy(_.last)
                    .map(function(a) { return _([a]).object() })
                    .value();

Demo: http://jsfiddle.net/ambigously/76ZPx/

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

按值对对象进行排序 的相关文章

  • Eslint errorring 导入没有扩展名的 jsx

    我正在尝试在 es6 中导入 jsx 文件而不需要 jsx 扩展名 import LoginErrorDialog from LoginErrorDialogView Not import LoginErrorDialog from Log
  • 以编程方式填写reactjs表单

    我正在编写一个用户脚本 但无法填写由reactjs制作的表单 我的代码 document querySelector id username value email protected cdn cgi l email protection
  • 如何修改每个JSON对象javascript

    我想修改里面的每个 JSON 值cooldown object cooldown user 1 This user2 0 This 在 Javascript 中使用 for 语句 我研究了好几个小时 只找到了内部的 blocks Edit
  • Three.js:缩放几何图形后错误的 BoundingBox

    在我的场景中 我有一个简单的立方体 var test new THREE Mesh new THREE CubeGeometry 10 10 10 new THREE MeshBasicMaterial scene add test 该立方
  • 使用 JavaScript 禁用第三方 cookie

    我正在努力根据所有在欧盟运营的公司的数据保护规则实施新的 Cookie 政策合规性 根据该规则 用户在使用任何网站时必须能够拒绝 接受除必需的 Cookie 之外的所有内容 在我客户的网站中 我可以看到正在存储以下第三方 cookie ga
  • 如何格式化 Highcharts 的 (x,y) 对数据的日期时间

    我的序列化方法会产生如下所示的日期时间字符串 2014 07 09T12 30 41Z 为什么下面的代码不起作用 function container highcharts xAxis type datetime series data x
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 图像无法在带有 DOM 的 IE 中加载:控制台中的 7009 错误(无法解码)

    当在 IE 中的单个页面上加载许多图像时 在 IE11 中重现 其中一些图像开始加载失败 并在控制台中出现类似以下警告的内容 DOM7009 无法解码 URL 处的图像 某些唯一的 url 当我查看网络流量时 似乎确实从服务器收到了每个图像
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 如何制作没有 ng-repeat 的模板并使用 Angular-drag-and-drop-lists 将数据传递到 $scope?

    我想用角度拖放列表 https github com marceljuenemann angular drag and drop lists使用我自己的网格模板到所见即所得编辑器 如何构建我自己的 HTML 模板而不需要ng repeat因
  • 页面上使用 HTML Editor Extender 进行回发会导致 IE11 中出现 JavaScript 错误

    我已将 HTML 编辑器扩展程序添加到我正在处理的页面中 现在每当我在页面上发回帖子时 都会收到以下 Javascript 错误 JavaScript 运行时错误 参数无效 之后什么也没有发生 这在 IE10 或更低版本以及我所知道的所有其
  • Javascript 假值(null、未定义、false、空字符串:“”或 '' 和 0)和比较(==)运算符 [重复]

    这个问题在这里已经有答案了 当我使用任何一个值时 null undefined false 0 in a if陈述 它总是被评估为谬误 false 另外 这些值的否定 null undefined false 0 in a if语句总是被评
  • Three.js 各种大小的粒子

    我是 Three js 的新手 正在尝试找出添加 1000 个粒子的最佳方法 每个粒子都有不同的大小和颜色 每个粒子的纹理是通过绘制画布创建的 通过使用粒子系统 所有粒子都具有相同的颜色和大小 为每个粒子创建一个粒子系统是非常低效的 有没有
  • 如何使用 crypto-js 解密 AES ECB

    我正在尝试将加密数据从 flash 客户端 发送到服务器端的 javascript 在 asp 中作为 jscript 运行 有几个 javascript Aes 库 但它们实际上没有文档记录 我正在尝试使用 crypto js 但无法让代
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 如何用另一个响应替换窗口的 URL 哈希?

    我正在尝试使用替换方法更改哈希 URL document location hash 但它不起作用 function var anchor document location hash this returns me a string va
  • JavaScript 相对路径

    在第一个 html 文件中 我使用了一个变量类别链接 var categoryLinks Career prospects http localhost Landa DirectManagers 511 HelenaChechik Dim0
  • 使用 MongoDB 和 Nodejs 插入和查询日期

    我需要一些帮助在 mongodb 和 nodejs 中按日期查找记录 我将日期添加到抓取脚本中的 json 对象 如下所示 jsonObj last updated new Date 该对象被插入到 mongodb 中 我可以看到如下 la
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐

  • 无法写入缓存 symfony2

    RuntimeException in ClassCollectionLoader php line 239 Failed to write cache file var www fareast app cache dev classes
  • AADSTS50013:断言签名验证失败。 [原因 - 未找到密钥。,客户端使用的密钥指纹:'xxxx'

    我有三个应用程序参与 AzureAD OBO 流程 Angular FrontEnd gt 向 AzureAD 注册为 OIDC 应用程序 ASP NET Core Web API gt 向 AzureAD 注册为 SAML 应用程序 NA
  • 将 ggplot 对象转换为plotly 对象会创建与刻度值重叠的轴标题

    我在这个问题中描述了同样的问题 R ggplot和plotly轴边距不会改变 但是当我实施该解决方案时 出现以下错误 警告 忽略未知的美学 文本 我们建议您使用 ggplot2 的开发版本和 ggplotly 安装它 devtools in
  • 是否可以通过 API 创建新的 Firebase 项目?

    是否可以通过 API 或 Google Firebase 上的其他非交互式方法创建新的托管项目 我已经尝试过使用令牌的 Firebase 工具 但它说只能在 Firebase 控制台上创建新项目 一些背景 我的项目允许用户在线创建静态网站
  • 使用javascript获取浏览器下载路径

    我在网上搜索了很多答案 但一无所获 有没有办法通过Javascript获取浏览器的下载路径 我不想自己设置路径 我只想知道我的文件去哪里下载后由用户 这是不可能的 纯浏览器 JavaScript 无法获取有关用户文件系统的信息 默认下载路径
  • 记录太大 MS Access 运行时错误

    我在 MS Access 中的一个应用程序有一个异常大的表 它严重违反了一些规范化规则 但对于这个小型应用程序来说还不错 它有大约 100 个字段 列 我已阅读限制规范在这里但看不出我在哪里违反了这些 大多数字段都是文本字段 范围从几个单词
  • 防止注释显示在图形区域之外

    我使用以下代码创建带有注释的散点图 import numpy as np import matplotlib pyplot as plt np random seed 12 plt scatter np random random 10 n
  • PHP Datetime 无法转换负 ISO8601 日期

    用 DateTime 转换负日期让我错误 测试代码 var dump DateTime createFromFormat DateTime ISO8601 0001 11 30T00 00 00 0100 Result boolean fa
  • 使用 EF Core 5 查询 Postgres Json 字段

    我有下表定义 Table MyTable public class MyTable BaseEntity Required public string A get set Required Column TypeName json publ
  • 如何在通用应用程序中禁用任务并行库的 ETW EventSource?

    任务并行库使用Windows 事件跟踪 ETW 用于记录 显然 在 Windows Phone 或 Windows Store NET Runtime 下出现的 TPL 或 ETW 中存在与日志记录相关的错误 原问题已描述here 可能的解
  • Codeigniter 批量更新复选框

    我有这样的情况 我想更新一些输入为复选框的数据 我尝试了下面的代码 数据已保存在数据库中 但数据保存在另一行中 例如 我为 BirdA 检查了红色 黄色和灰色 同时为 BirdD 检查了深色和蓝色 在数据库中 BirdA 的颜色已正确保存
  • Rails 3 has_many 关系中nested_attributes 的 I18n 标签翻译

    使用 Rails 3 0 3 Ruby 1 9 2 关系如下 class Person lt ActiveRecord Base has many contact methods accepts nested attributes for
  • 限制listview的行数

    我正在开发一个需要通过蓝牙与其他设备配对的应用程序 我无法以正确的方式显示配对设备列表 我还查看了 android api 蓝牙聊天 中的示例 但我遇到了同样的问题 配对设备列表太大 然后隐藏了列表底部的搜索按钮 我的 xml 代码与示例非
  • 如何使用 Ajax 调用 PHP 函数?

    我有一个返回数组的 PHP 函数 function lire id ret array sSQL SELECT FROM produit WHERE prod code id LIMIT 1 this gt db gt query sSQL
  • 使用 tablesorter 插件排序时间 hh:mm:ss

    我正在使用 tablesorter 插件 并且有一列以 hh mm ss 格式排序 排序器 时间 不起作用 有没有办法对该列进行排序 谢谢 我已经尝试过这样的操作 但它没有对列进行排序 ts addParser id customDate
  • 正则表达式末尾大括号中的逗号分隔数字是什么意思?

    我试图理解以下正则表达式 我理解最初的部分 但我无法弄清楚 3 19 在这里做什么 A Z A Za z0 9 s 3 19 这就是称为量词的自定义重复操作 d 3 将找到正好三位数字 a c 1 3 将发现 a b 或 c 至少出现一次
  • 无法访问用户的电子邮件。变得“未定义”

    我有一个带有 Facebook 登录实现的网站 我的应用程序具有用户电子邮件的权限 即使用户使用 Facebook 登录我的应用程序 我也只能检索他 她的姓名或基本信息 不是电子邮件 所以 这是我从 Facebook 开发者网站上复制的代码
  • Android 垂直视图寻呼机,带卡片堆栈

    我正在尝试实现垂直滑动ViewPager具有一叠卡片般的外观 I am able to achieve VerticalViewPager using ViewPager PageTransformer and swapping the t
  • TSQL - 尝试将变量与 IF EXISTS() 函数一起使用以实现简单的 SP

    我们公司运行 MS Access 前端和 SQL 后端 我试图为前端提供一个存储过程 使其能够访问 T SQL 的 IF EXIST 而不是使用 DCount 来提高性能 为此 我需要能够将 SELECT 语句传递给存储过程 到目前为止 我
  • 按值对对象进行排序

    我在使用 Underscore 时遇到困难 我想按以下对象的值按字母顺序对它进行排序 并以相同的格式返回它 accommodation Accommodation bed breakfast Bed amp Breakfast carava