- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下有这个数组:
var fees = [
'$0.9 + $0.1',
'$20 + $2',
'$0.7 + $0.4',
'$5 + $0.5',
'$0 + $0.01',
'$100 + $9',
'$1 + $1',
'$2 + $0.5'
];
我如何使用 vanilla JavaScript 按数字升序对这些字符串值进行排序?
排序后的期望输出:
['$0 + $0.01', '$0.7 + $0.4', '$0.9 + $0.1', '$1 + $1', '$2 + $0.5', '$5 + $0.5', '$20 + $2', '$100 + $9']
I tried the following:
function mySort(a, b) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
}
但这只是输出:
["$0 + $0.01", "$0.7 + $0.4", "$0.9 + $.1", "$1 + $1", "$100 + $9", "$2 + $0.5", "$20 + $2", "$5 + $0.5"]`
这是否可能以简洁且合乎逻辑的方式进行?
我不希望得到总和,因为它会产生不需要的结果。考虑 "$0.9 + $0.1"
和 "$0.7 + $0.4"
的示例。 "$0.9 + $0.1"
将是一个较低的值,因为总和为 1
,但我想排序以便 "$0.7 + $0.4"
相反是一个较低的值。所以基本上我们的愿望是对第一个数字进行升序排序,如果两个值之间的第一个数字相同,则对第二个数字进行排序
最佳答案
根据字符串中数字的总和进行排序。
var fees = ['$0.9 + $.1', '$20 + $2', '$5 + $0.5', '$0 + $0.01', '$100 + $9', '$1 + $1', '$2 + $0.5'];
fees.sort(function(a, b) {
return getSum(a) - getSum(b);
})
function getSum(str) {
return str
// remove the $ and space
.replace(/[^\d+.]/g, '')
//split by + symbol
.split('+')
// get the sum
.reduce(function(sum, s) {
// parse and add with sum
return sum + (Number(s) || 0);
// set inital value as sum
}, 0)
}
console.log(fees);
您可以通过使用保存总和的附加对象来加快该过程。
var fees = ['$0.9 + $.1', '$20 + $2', '$5 + $0.5', '$0 + $0.01', '$100 + $9', '$1 + $1', '$2 + $0.5'];
var ref = fees.reduce(function(obj, str) {
// define object property if not defined
obj[str] = str in obj || str
// remove the $ and space
.replace(/[^\d+.]/g, '')
//split by + symbol
.split('+')
// get the sum
.reduce(function(sum, s) {
// parse and add with sum
return sum + (Number(s) || 0);
// set inital value as sum
}, 0);
// return the object reference
return obj;
// set initial value as an empty objecct
}, {})
fees.sort(function(a, b) {
return ref[a] - ref[b];
})
console.log(fees);
更新:由于您更新了问题,因此您需要比较各个部分。
var fees = ['$0.9 + $.1', '$20 + $2', '$5 + $0.5', '$0 + $0.01', '$100 + $9', '$1 + $1', '$2 + $0.5'];
fees.sort(function(a, b) {
// get numbers from a
var arrA = a.replace(/[^\d.+]/g, '').split('+');
// get numbers from b
var arrB = b.replace(/[^\d.+]/g, '').split('+');
// generate sort value
return arrA[0] - arrB[0] || arrA[1] - arrB[1];
})
console.log(fees);
关于javascript - 按数字顺序对 "advanced"数字字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42780497/
今天,我在 Windows 10 的“程序和功能”列表中看到了 2 个不同版本的 ARC,因此我选择卸载旧版本,因为我需要一些空间。在卸载结束时,它们都消失了! 所以,我从 https://insta
我刚买了一台更强大的电脑,安装了 composer 并想继续我的项目,但是当我使用 gii 时,它给了我这个错误。 我该如何解决?为什么我得到它?谢谢你。 最佳答案 解决了。自 2.0.13 起,类名
1、介绍 这是我的《Advanced .Net Debugging》这个系列的第十一篇文章,也是这个系列的最后一篇了。我已经把原书的前八章内容全部写完了,本来打算继续写第九章和第十章的内容,后
一、介绍 这是我的《Advanced .Net Debugging》这个系列的第十篇文章。这篇文章的内容是原书的第三部分的【高级主题】的第八章【事后调试】。前面几篇文章,我们介绍了很多工具,可以
一、介绍 这是我的《 Advanced .Net Debugging》这个系列的第八篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第六章【同步】。我们经常写一些多线程的应用程序,写的多
一、介绍 这是我的《 Advanced .Net Debugging》这个系列的第九篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第七章【互用性】。互用性包含两个方面,第一个方面就是托
一、简介 这是我的《Advanced .Net Debugging》这个系列的第七篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第五章,这一章主要讲的是从根本上认识托管堆和垃圾回收。软件
一、简介 这是我的《 Advanced .Net Debugging》这个系列的第六篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第四章。这章主要讲的是程序集加载器,比如:CLR 加载
一、简介 我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用。他们采取的分析方法通常包括:输出更多的调试信息,或者做一
一、简介 我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用。他们采取的分析方法通常包括:输出更多的调试信息,或者做一
一、简介 我曾看到过许多开发人员使用错误的工具来分析问题,更有甚者,有些人连任何工具都没有使用。他们采取的分析方法通常包括:输出更多的调试信息,或者做一
我是 yii2 的新手,当我使用 从存档中提取 yii2 高级内容时《基本应用模板》、《带有高级应用模板的Yii 2》当我在服务器上上传时,它显示空白页面。 我检查了 yii2 basic 它工作正常
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
如果我遗漏了任何重要的细节,我想提前道歉。 我正在尝试执行升级,在安装新版本之前应删除以前版本的软件(和所有组件)。 我会尽量避免让您厌烦细节,并说如果您进行“典型”安装,一切都会按计划进行。如果您选
您好,我正在尝试创建一个存储整数或字符串元素的通用列表迭代器。我正在尝试测试它调用 IteratorG advance(IteratorG it, int n) 函数的情况,该函数采用在列表 it 中
我想知道是否有任何可能的方法,使 MySQL 查询可以动态搜索 WHERE 子句中的任何内容。 例如,如果查询是 Select * from table where item = 'Dell Opti
我正在使用 PayPal Advanced,并使用用户定义的字段 USER1 - USER10 发送一些交易数据,这将帮助我在通过 Silent Post 请求返回时识别它。有谁知道这些 USERx
这个问题在这里已经有了答案: How to use "distanceTo", "advancedBy" to handle String in Xcode7 beta6 (2 个答案) 关闭 7
请告诉我如何提前获得 transactionHash? // I have these tx opts: var txOpts = { "to":"0x345cA3e014Aaf5dcA48805
我正在尝试使用 Eloquent 创建类似的东西。但是,我在使用 or 子句时遇到了麻烦。 SELECT * FROM table WHERE column1 = 1 AND column2 = 2
我是一名优秀的程序员,十分优秀!