在 JavaScript 中高效比较数组
简介
在 JavaScript 中比较数组可能很棘手。比较运算符 (==) 无法按预期工作,并且将数组转换为 JSON 进行比较可能效率低下。以下是有效比较数组的综合指南:
比较数组
要执行有效的数组比较,请按照以下步骤操作:
1 。自定义 Equals 方法:
在 Array.prototype 上定义一个名为 equals 的自定义方法。此方法将递归比较数组的每个元素。
Array.prototype.equals = function (array) { if (!array) return false; if (this === array) return true; if (this.length !== array.length) return false; for (let i = 0; i < this.length; i++) { if ( this[i] instanceof Array && array[i] instanceof Array ) { if (!this[i].equals(array[i])) return false; } else if (this[i] !== array[i]) { return false; } } return true; };
2.用法:
要使用 equals 方法比较两个数组,只需在其中一个数组上调用它,如下所示:
[1, 2, [3, 4]].equals([1, 2, [3, 2]]) === false;
比较对象
部分比较对象是可能的,但你需要注意,两个对象实例永远不会相等,即使它们包含相同的内容数据。
1。对象的自定义等于方法:
Object.prototype.equals = function (object2) { for (let propName in this) { if ( this.hasOwnProperty(propName) !== object2.hasOwnProperty(propName) ) { return false; } else if ( typeof this[propName] !== typeof object2[propName] ) { return false; } } for (let propName in object2) { if ( this.hasOwnProperty(propName) !== object2.hasOwnProperty(propName) ) { return false; } else if ( typeof this[propName] !== typeof object2[propName] ) { return false; } if (!this.hasOwnProperty(propName)) continue; if ( this[propName] instanceof Array && object2[propName] instanceof Array ) { if (!this[propName].equals(object2[propName])) return false; } else if ( this[propName] instanceof Object && object2[propName] instanceof Object ) { if (!this[propName].equals(object2[propName])) return false; } else if (this[propName] !== object2[propName]) { return false; } } return true; };
2.用法:
({ a: 1, foo: "bar", numberOfTheBeast: 666 }).equals({ a: 1, foo: "bar", numberOfTheBeast: 666, }) === false;
带有indexOf和contains的嵌套数组
对于涉及嵌套数组的更复杂的情况,可以使用indexOf和contains函数来搜索对于嵌套中的特定对象
结论
通过遵循这些技术,您可以有效地比较 JavaScript 中的数组和对象,解决常见的陷阱,并使您能够自信地执行此类比较。
以上是如何在 JavaScript 中高效比较数组和对象?的详细内容。更多信息请关注PHP中文网其他相关文章!