gpt4 book ai didi

javascript - for..in 循环内的问题

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

我正在创建一个函数来检查两个数组是否相同,而我目前一直在检查两个对象(可能位于数组内)是否相同。

为了稍微解释一下我的代码,我有一个名为 eq 的变量,该变量在函数结束时返回,并且应包含 true 对于第二个数组中存在的第一个数组的每个元素,如果元素不存在,则为 未定义

此外,我使用递归 IIFE 来检查对象是否具有子对象,并且子对象是否也相同。要检查数组元素是否是对象文字,我使用 el.constructor === Object

虽然不是 100% 确定,但我相信我在 for..in 循环中做错了一些事情。

代码:

function equals(a, b) {
return (a === b && a !== null) || (a.length === b.length && (function(a, b) {
var eq = [];

a.forEach(function(el1, index) {
b.forEach(function(el2) {
if (el1 === el2) eq[index] = true;
else if (el1.constructor === el2.constructor && el1.constructor === Object) {
/* a -> the object of the first array
* b -> the object of the second array
* c -> eq[index] then eq[index][i] provided how deep it goes */
(function rec(a, b, c) {
c = [];
var i = 0;
for (var prop in a) {
for (var attr in b) {
if (prop === attr && a[prop] === b[attr]) c[i] = true;
else if (prop === attr && a[prop].constructor === b[attr].constructor
&& a[prop].constructor === Object) {
rec(a[prop], b[attr], eq[index][i]);
}
}
i++;
}
})(el1, el2, eq[index]);
}
});
});
return /*!~eq.indexOf(undefined);*/ eq;
})(a, b));
}

/* Use */
var a = [1, {a: "a", b: "b" }, 4, 6],
b = [{a: "a", b: "b"}, 1, 7, 6];

equals(a, b);

<小时/>

示例 1: (适用于简单数组)

var
a = [1, 3, 4, 6],
b = [3, 1, 7, 6];

equals(a, b); // returns: [true, true, undefined, true]

示例 2: (不适用于对象)

var
a = [1, {a: "a", b: "b"}, 4, 6],
b = [{a: "a", b: "b"}, 1, 7, 6];

equals(a, b); /* returns: [true, undefined, undefined, true]
SHOULD return: [true, [true, true], undefined, true] */

任何帮助将不胜感激。

最佳答案

我认为问题在于您的 eq[index] 被传递给比较器函数。这不会传递引用,而只是传递一个未定义的值。通过在函数内设置c = [],您将覆盖新数组未定义的内容。与 eq 没有任何联系。重构您的代码,以便您可以在 rec 外部的 eq[index] 中创建数组并将其传入 (c)。或者让函数 rec 返回一个值。

关于javascript - for..in 循环内的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638985/

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