1

我正在使用NW.js将 IDE 作为一个辅助项目,我需要检测我的项目树在聚焦时是否有任何更改。

我正在使用JQuery 的 .each检查项目文件夹中的文件自聚焦以来是否发生了变化。

这就是我所拥有的以窗口为中心的功能。

win.on("focus", function() {
  var stringArray = [];
  listFiles = fs.readdirSync(__dirname + "/content/project");
  console.log("checking if there's any changes");
  $.each($("[data-nme]"), function() {
    stringArray.push(this.textContent);
  });
  var array1 = listFiles;
  var array2 = JSON.stringify(stringArray);

  console.log(array1);
  console.log(array2);

  if (array1.toString() != array2.toString()) {
    console.log("there's been a change");
  }
});

当我调试时,我得到以下结果。

在此处输入图像描述

我不明白为什么它说数组完全相同时会有所不同。

if (array1.toString() != array2.toString()) {
  console.log("there's been a change");
}
4

1 回答 1

1

错误在于您检查相等性的方式。一个数组是 JSON.stringified 另一个不是。不要使用 JSON.stringify(stringArray) 来定义 array2。

var foo = ["bar"];
foo.toString();

输出:"foo"

JSON.stringify(foo).toString()

输出:"["foo"]"

这种情况应该有效(尚未测试):

 if (array1.toString() != stringArray.toString()) {
    console.log("there's been a change");
  }

如果您想要比较数组的最佳选择,请检查以下内容: 如何在 JavaScript 中比较数组?

于 2016-07-03T01:28:14.093 回答