我有一个任务,包括在JavaScript中创建一个函数,该函数对接收无序整数列表的数组进行排序。该函数必须根据以下条件返回有序整数数组:
示例:
对于条目:[1、15、5、7、3]
返回应为:[15、7、3、5、1]
说明:
十进制=二进制
其二进制表示形式包含加号的十进制数为15(二进制为1111),因此它将在数组中排在第一位(索引= 0)。然后继续使用7,其二进制表示形式为三(111)。
然后有2个数字,其二进制表示形式包含 相同的小数位数,这些小数点分别为5(101)和3(11),两者均为2。在这种情况下,它将以3开头(接近索引= 0),因为它的十进制表示形式较小(3 <5)。
解决方案:
最后,我找到了解决此任务的方法:
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的第一个问题)
谢谢!
答案 0 :(得分:2)
您可以将数字转换为二进制(字符串类型)
var binary = 134.toString(2);
然后,实现与数字之间的比较功能
function binaryCompare(a, b) {
a = a.binary;
b = b.binary;
//...
}
之后,只需致电
[1,2,34,342]
.map( a => ({value:a, binary: a.toString(2))
.sort(binaryCompare)
.map( v => v.value );
由于我不了解您的目标,因此无法实现排序功能。 希望对您有帮助