我使用以下代码根据元素在数组中出现的频率对元素进行排序,但它在 Node.js 中不起作用。我尝试从 Safari 和 Chrome 上的 Web 检查器中的控制台运行此代码,并且它在那里工作正常。我做错了什么?
function textCount(text, items) {
var count = 0;
for (var i = 0, length = items.length; i < length; i++) {
if (items[i] == text) {
count++;
}
}
return count;
}
var array = ["one", "four", "two", "three", "four", "two", "four", "three", "four", "three"];
var sortedArray = array.sort((a, b) => {
var value1 = textCount(a, array);
var value2 = textCount(b, array);
if (value1 < value2) return 1;
if (value1 > value2) return -1;
return 0;
});
console.log(sortedArray);
这些是 Node.js 中的结果。它们没有按顺序排列。
[ 'four',
'two',
'three',
'four',
'four',
'two',
'three',
'four',
'three',
'one' ]
如果我像这样反转方向,它会按预期工作,但我希望它以其他方式排序。
if(value1 < value2) return -1;
if(value1 > value2) return 1;
最佳答案
当您在排序函数中传递原始数组时,在此实现中似乎错误地计算了出现次数。
它在浏览器中工作的原因是浏览器不会改变数组变量,而 NodeJS 会改变。如果您传递数组值的副本,它应该按预期工作。
function textCount(text, items) {
var count = 0;
for (var i = 0, length = items.length; i < length; i++) {
if (items[i] == text) {
count++;
}
}
return count;
}
var array = ["one", "four", "two", "three", "four", "two", "four", "three", "four", "three"];
let arr = [...array]
var sortedArray = array.sort((a, b) => {
var value1 = textCount(a, arr);
var value2 = textCount(b, arr);
if (value1 < value2) return 1;
if (value1 > value2) return -1;
return 0;
});
console.log(sortedArray);
关于javascript - 在 Node.js (v10.9.0) 中对元素进行排序会返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58663980/