我创建一个函数,检查两个数组是否相同,我目前坚持检查两个对象(可能在一个数组内)是相同的。问题里面for..in循环
解释我的代码一点点,我有一个名为可变eq
当函数结束,它应包含true
对存在的第二阵列或在第一阵列中的每个元素所返回undefined
如果一个元素没有。
此外,我使用递归IIFE来检查对象是否有子对象,并且子对象也是相同的。要检查数组元素是否是对象字面量我使用el.constructor === Object
。
没有百分之一百确定,我相信我在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] */
任何帮助,将不胜感激。
我敢肯定是比较两个数组已经存在于许多库和框架的一个功能。为什么重新发明轮子? –
这是我的大学@HubertGrzeskowiak的练习:) –
啊好的。你确定你想比较数组忽略元素的顺序吗? –