【发布时间】:2019-09-24 04:41:48
【问题描述】:
我有一项任务,其中包括在 JavaScript 中创建一个函数,该函数对接收无序整数列表的数组进行排序。该函数必须根据以下条件返回一个有序的整数数组:
- 整数的二进制表示中的 1 越多,元素应该越接近索引 0。
- 如果两个或多个数字在其二进制表示中的个数相同,则十进制数 价值较小的将更接近开始。
例子:
对于条目:[1, 15, 5, 7, 3]
返回应该是:[15, 7, 3, 5, 1]
解释:
十进制 = 二进制
- 1 = 1
- 15 = 1111
- 5 = 101
- 7 = 111
- 3 = 11
二进制表示中包含加一的十进制数是 15(二进制为 1111),因此它将在数组中排在第一位(索引 = 0)。然后继续 7,在其二进制表示中包含三 (111) 个。
那么有 2 个数字的二进制表示包含 相同的个数,这些小数是 5 (101) 和 3 (11),两者都有 2 个。在这种情况下,它将首先(更接近 index = 0)3,因为它的十进制表示更小(3
解决方案:
最后,我找到了解决这个任务的方法:
const binaryOnes = integerArr => {
let binaryArray = integerArr.map(num => num.toString(2))
binaryArray.sort((a, b) => {
let regEx = /1/g
let A = a.match(regEx).length
let B = b.match(regEx).length
if (A < B) return 1
else if (A > B) return -1
else {
let binaryToIntegerA = parseInt(A, 2)
let binaryToIntegerB = parseInt(B, 2)
if (binaryToIntegerA < binaryToIntegerB) return -1
else return 1
}
})
return binaryArray.map(num => parseInt(num, 2))
}
binaryOnes([1,15,5,7,3]) // [ 15, 7, 3, 5, 1 ]
如果有人找到更好的方法来解决它,我将不胜感激。
还有这篇文章的一些反馈(是我在 StackOverflow 上的第一个问题)
谢谢!
【问题讨论】:
-
请先自己尝试一下,然后让我们知道您是否以及在哪里遇到问题
-
一种方法:1.将其更改为二进制表示(可能是字符串) 2.排序 3.改回。
-
您将需要更接近 SO 的代码。 - WWC
-
感谢您的反馈,这是我在 StackOverflow 中的第一个问题。最后,我得到了解决方案并发布了它。
标签: javascript arrays binary integer