使用sort()方法比较两个数组



我有下一个代码应该比较数组;

function compare(arr) {
const sorted = arr.sort((a,b)=> a -b).join(',');
const unsorted = arr.join(',')
console.log(sorted === unsorted) // true
}
compare([1, 16, 7])

为什么我得到true,或者数组应该不同?

尝试使用spread opeart或复制数组

请注意,数组是在适当的位置排序的,不会进行复制。

function compare(arr) {
const sorted = [...arr].sort((a, b) => a - b).join(',');
const unsorted = arr.join(',')
console.log(sorted === unsorted) // true
}
compare([1, 16, 7])

原因是您正在比较相同的字符串。怎么是同一根绳子?好吧,.sort()在适当的位置进行排序——这意味着它不会返回一个新的排序数组,而是对同一个数组进行排序。因此,对于unsorted,您正在加入相同的排序数组。你可以尝试切换分配的顺序,结果应该是不同的

根据MDNsort()将修改原始数组!MDN Array.prototype.sort((

由于您正在对数组进行排序,因此几乎不可能检查它们是否相等。如果你不想检查所有存在的值是否与两个数组相同,你可以尝试这样的方法吗。

function compare(arr) {
const unsorted = arr.slice()
const sorted = arr.sort((a,b)=> a -b)
console.log(sorted)
console.log(unsorted)
if(checkIfValuesAreEqual(sorted, unsorted))
console.log("they are equal")
else
console.log("they are not equal")
}
checkIfValuesAreEqual = (sorted, unsorted) => {
if(sorted.length != unsorted.length)
return false
let sortedObj = {}
let unsortedObj = {}
for(const value of sorted){
if(value in sortedObj)
sortedObj[value] += 1
else
sortedObj[value] = 1
}
for(const value of unsorted){
if(value in unsortedObj)
unsortedObj[value] += 1
else
unsortedObj[value] = 1    
}
const keysSorted = Object.keys(sortedObj)
const keysUnSorted = Object.keys(unsortedObj)

if(keysSorted.length != keysUnSorted.length)
return false

for(const key of keysSorted){
if(sortedObj[key] != unsortedObj[key])
return false
}
return true
}
compare([1, 16, 7])

必须更改一些内容,如unsorted=arr.slice((,Javascript通过引用放置所有内容,因此unsorted和sorted是相同的。为了检查两者是否相同,我需要循环通过,所以我需要它们作为数组而不是字符串。

如果一个字符串已排序,而另一个字符串未排序,我认为无法比较两个字符串,因为有些值会交换位置。

数组#排序到位。因此,在排序之前加入数组:

function compare(arr) {
const unsorted = arr.join(',');//moved up
const sorted = arr.sort((a,b)=> a -b).join(',');
console.log(sorted === unsorted) // false
}
compare([1, 16, 7])

最新更新