gpt4 book ai didi

javascript - JS中的Bigint破坏了数组排序?

转载 作者:行者123 更新时间:2023-12-05 00:27:17 26 4
gpt4 key购买 nike

好像是 Array.prototype.sort()BigInt 打破
这有效

const big = [1n, 2n, 3n, 4n];
big.sort();
console.log(big);
// expected output: Array [1n, 2n, 3n, 4n]
但这不是:(
const big = [1n, 2n, 3n, 4n];
big.sort((a,b)=>a-b);
console.log(big);
//Error: Cannot convert a BigInt value to a number
还是我做错了什么?

最佳答案

JavaScript 排序方法需要一个函数作为参数,该函数可以比较数组的两个元素并返回正数、负数或零。数字是这里的关键词。
BigInt加法和减法等运算返回 BigInt 类型而不是 Number 类型。这就是你得到错误的原因。
所以,像这样的东西应该可以完成这项工作

const big = [1n, 2n, 3n, 4n];
big.sort((a ,b) => {
if(a > b) {
return 1;
} else if (a < b){
return -1;
} else {
return 0;
}
});
console.log(big);

有趣的是, MDN document that I linked to previously , 还建议如何对 BigInts 数组进行排序,而且很简洁:
在这里复制整个部分以供后代使用:
const mixed = [4n, 6, -12n, 10, 4, 0, 0n]
// ↪ [4n, 6, -12n, 10, 4, 0, 0n]

mixed.sort() // default sorting behavior
// ↪ [ -12n, 0, 0n, 10, 4n, 4, 6 ]

mixed.sort((a, b) => a - b)
// won't work since subtraction will not work with mixed types
// TypeError: can't convert BigInt to number

// sort with an appropriate numeric comparator
mixed.sort((a, b) => (a < b) ? -1 : ((a > b) ? 1 : 0))
// ↪ [ -12n, 0, 0n, 4n, 4, 6, 10 ]

关于javascript - JS中的Bigint破坏了数组排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65435403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com