合并具有不同值类型的2个数组

时间:2018-04-11 15:45:29

标签: javascript arrays node.js mongoose

在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)

1 个答案:

答案 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));




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