gpt4 book ai didi

javascript - JS函数 "Deep comparison"。对象比较

转载 作者:行者123 更新时间:2023-12-03 02:30:38 24 4
gpt4 key购买 nike

我想实现一个JS功能“深度比较”,并遇到一个有趣的功能。

第一个案例 -

var arrValuesObjA = [{is: "an"}, 2];
var arrValuesObjB = [{is: "an"}, 2];

console.log(Array.isArray(arrValuesObjA), arrValuesObjA);
//true Array [ {…}, 2 ] // 0: Object { is: "an" } 1: 2 length: 2
console.log(Array.isArray(arrValuesObjB), arrValuesObjB);
// true Array [ {…}, 2 ] // 0: Object { is: "an" } 1: 2 length: 2


for (let i = 0; i < arrValuesObjA.length; i++) {
console.log(arrValuesObjA[i] === arrValuesObjB[i]);
// First iteration - false, second iteration - true.
// Means Object { is: "an" } from arrValuesObjA[0] don't equal to Object { is: "an" } from arrValuesObjB[0] !!!
}

但是看看第二种情况。

第二种情况 -

let objA = {here: {is: "an"}, object: 2}, objB = {here: {is: "an"}, object: 2};

var arrKeysObjA = Object.keys(objA);
var arrKeysObjB = Object.keys(objB);
var arrValuesObjA = [];
var arrValuesObjB = [];

for (let i = 0; i < arrKeysObjA.length; i++) {
arrValuesObjA.push(objA[arrKeysObjA[i]]);
}

for (let i = 0; i < arrKeysObjB.length; i++) {
arrValuesObjB.push(objA[arrKeysObjB[i]]);
}

console.log(Array.isArray(arrValuesObjA), arrValuesObjA);
// true Array [ {…}, 2 ] // 0: Object { is: "an" } 1: 2 length: 2 // the same as in 1st case!
console.log(Array.isArray(arrValuesObjB), arrValuesObjB);
// true Array [ {…}, 2 ] // 0: Object { is: "an" } 1: 2 length: 2 // the same as in 1st case!

for (let i = 0; i < arrKeysObjA.length; i++) {
console.log(arrValuesObjA[i] === arrValuesObjB[i]);
// First iteration - true!!!, second iteration - true.
// Means Object { is: "an" } from arrValuesObjA[0] equal to Object { is: "an" } from arrValuesObjB[0] !!!
}

在第一种情况下,arrValuesObjA[0] 中的 Object { is: "an"} 不等于 arrValuesObjB[0] 中的 Object { is: "an"},但在第二种情况下,它们是相等的。

谁能解释一下这是怎么回事?我认为它在某种程度上与按值复制和按引用复制有关,但我不确定。

最佳答案

for (let i = 0; i < arrKeysObjA.length; i++) {
arrValuesObjA.push(objA[arrKeysObjA[i]]);
}

for (let i = 0; i < arrKeysObjB.length; i++) {
arrValuesObjB.push(objA[arrKeysObjB[i]]);
}

仔细观察上述两种情况,您正在使用 objA

关于javascript - JS函数 "Deep comparison"。对象比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48749616/

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