javascript - 在 Node.js (v10.9.0) 中对元素进行排序会返回错误结果

标签 javascript node.js

我使用以下代码根据元素在数组中出现的频率对元素进行排序,但它在 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/

相关文章:

javascript - ldapjs 连接在一段时间后超时

node.js - 如果我的 Node.js 服务器在等待 Web 服务回调时崩溃,会发生什么情况?

javascript - 在没有 Nodejs 的实时应用程序中,您仍然可以使用 php 作为 angularjs2 的后端吗?

javascript - node.js 错误 : EISDIR, 打开

javascript - 错误 : $digest already in progress

javascript - 如何有效地使这个 Google Apps 脚本循环?

html - 将值从 Express NodeJS 传递到 AngularJS Controller 变量

node.js - Node JS 和 SQL Server 2008 R2 Express

javascript - 将变量作为标签的 Jade 错误

javascript - 如果您知 Prop 体位置,则从嵌套数组中删除对象,javascript