我有下一个代码应该比较数组;
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
,或者数组应该不同?
答案 0 :(得分:2)
尝试使用扩展运算符复制阵列
请注意,数组是按顺序排序的,因此不会进行复制。
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])
答案 1 :(得分:0)
原因是您正在比较相同的字符串。
相同的字符串如何?好吧,.sort()
进行了适当的排序-意味着它不会返回新的排序数组,而是对同一数组进行排序。因此,对于unsorted
,您要加入相同的排序数组。
您可以尝试切换分配的顺序,结果应该不同
答案 2 :(得分:0)
根据MDN cat file1.txt | awk -v OFS="\t" '$1=$1' | tail -n +2 | awk '$1>=1 && $1<=4'
1 10 12
1 34 44
2 1 -3
3 4 -10.3
3 3.390 4
4 43 3
1 -90.3 2
2 32 3
3 43 -20
4 2 2
2 21 12
4 -0.9 12
4 -2.19 34
4 4 4
3 -12 3
,将修改原始数组!
MDN Array.prototype.sort()
答案 3 :(得分:0)
由于要对数组进行排序,因此几乎无法检查它们是否相等。 如果您不想检查所有存在的值是否都与两个数组相同,可以尝试这样的方法。
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通过引用来放置所有内容,因此未排序的n排序是相同的。要检查两者是否相同,我需要循环遍历,因此我需要将它们作为数组而不是字符串。
如果一个字符串被排序而另一个字符串不是因为某些值交换位置,则我不认为您可以比较两个字符串。
答案 4 :(得分:0)
Array#Sort进行适当排序。因此,在排序之前先加入数组:
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])