在MEAN堆栈中开发。 Express收到并处理req数组参数(最初为字符串),Mongoose返回对象数组属性。我面临着非常奇怪的问题。 Console.log按如下方式输出数组:
var arr1 = [ '5acde7adf7d2520e3b205970', '5acde7c0f7d2520e3b205971' ];
var arr2 = ["5acde7adf7d2520e3b205970","5acde7c0f7d2520e3b205971"];
第一个数组是JSON.parsed变量,第二个是MangoDB返回数组属性的属性。
我需要比较数组,如果它们不同 - 执行操作。
Lodash isEqual函数始终为false。 Lodash联合与concat和filter相同,输出数组如下(日志输出):
[ 5acde7adf7d2520e3b205970,
5acde7c0f7d2520e3b205971,
'5acde7adf7d2520e3b205970',
'5acde7c0f7d2520e3b205971' ]
如果我检查每个数组值的类型,那么第一个数组值是对象,第二个是字符串......
我可以将属性合并数组的唯一方法是通过预处理它们:JSON.parse(JSON.stringify(arr1))。然后所有值都是字符串并正确合并:
[ '5acde7adf7d2520e3b205970', '5acde7c0f7d2520e3b205971' ]
有人遇到过这个问题吗?可能有一些更好的想法如何处理它
对于我的问题,我发现的最佳解决方案是使用map函数来均匀数组值。例如:
arr2.map(String)
答案 0 :(得分:2)
如果它总是成为一个基元数组,那么比较它们的每个值应该很容易:
const arr1 = [ '5acde7adf7d2520e3b205970', '5acde7c0f7d2520e3b205971' ];
const arr2 = ["5acde7adf7d2520e3b205970","5acde7c0f7d2520e3b205971"];
const isSame = (arr1, arr2) => {
if (arr1.length !== arr2.length) return false;
return arr1.every((arr1elm, i) => arr1elm === arr2[i]);
}
console.log(isSame(arr1, arr2));

一个数组可能已使用双引号定义,另一个数组使用单引号但不会影响任何内容,因为它们已经反序列化 - 它仍然是下面的字符串数组,而不是一个字符串本身。