gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 02:11:01 25 4
gpt4 key购买 nike

在 MEAN 堆栈中开发。 Express接收并处理req数组参数(初始字符串),Mongoose返回对象数组属性。我面临着非常奇怪的问题。 Console.log输出数组如下:

var arr1 = [ '5acde7adf7d2520e3b205970', '5acde7c0f7d2520e3b205971' ];
var arr2 = ["5acde7adf7d2520e3b205970","5acde7c0f7d2520e3b205971"];

第一个数组是一个 JSON.parsed 变量,第二个是 MangoDB 返回的数组属性。

我需要比较数组,如果它们不同 - 则执行操作。

Lodash isEqual 函数始终为 false。Lodash union与concat和filter相同,输出数组如下(日志输出):

[ 5acde7adf7d2520e3b205970,
5acde7c0f7d2520e3b205971,
'5acde7adf7d2520e3b205970',
'5acde7c0f7d2520e3b205971' ]

如果我检查每个数组值的类型,则第一个数组值是对象,第二个数组值是字符串...

我可以属性合并数组的唯一方法是对它们进行预处理,例如:JSON.parse(JSON.stringify(arr1))。然后所有值都是字符串并正确合并:

[ '5acde7adf7d2520e3b205970', '5acde7c0f7d2520e3b205971' ]

有人遇到过这个问题吗?可能有一些更好的想法如何处理它

对于我的问题,我发现的最佳解决方案是使用映射函数来偶数数组值。例如:

arr2.map(String)

最佳答案

如果它始终是一个基元数组,那么比较它们的每个值应该很容易,如下所示:

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

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

关于javascript - 合并 2 个具有不同值类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49779348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com