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

标签 javascript

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

为了稍微解释一下我的代码,我有一个名为 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/

相关文章:

javascript - 在 div 中的 insideHTML 的每次更改中添加 EventListener

javascript - Uncaught ReferenceError : ytcfg is not defined (also __ytRIL is not defined)

javascript - 如何在 <td> 中显示一行文本

javascript - 扩展javascript函数继承数组

javascript - 了解 SVG 查询字符串参数

javascript - Azure 函数未在本地触发

javascript - javascript中concat的语法

javascript - JS中大数组的最大值/最小值

javascript - Angular post 和 web api C#

JavaScript d3.csv() 给出错误 : read ECONNRESET