Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从react中的js文件导出自定义array.prototype方法_Javascript_Reactjs - Fatal编程技术网

Javascript 如何从react中的js文件导出自定义array.prototype方法

Javascript 如何从react中的js文件导出自定义array.prototype方法,javascript,reactjs,Javascript,Reactjs,我有一个方法让数组检查它们是否相等。所以我想导出这个方法,以便能够在所有项目中使用这个方法。我有一个文件A.js。如何从那里导出此方法 Array.prototype.equals = function(array) { // if the other array is a falsy value, return if (!array) return false // compare lengths - can save a lot of time if (this.lengt

我有一个方法让数组检查它们是否相等。所以我想导出这个方法,以便能够在所有项目中使用这个方法。我有一个文件A.js。如何从那里导出此方法

Array.prototype.equals = function(array) {
  // if the other array is a falsy value, return
  if (!array) return false

  // compare lengths - can save a lot of time
  if (this.length != array.length) return false

  for (var i = 0, l = this.length; i < l; i++) {
    // Check if we have nested arrays
    if (this[i] instanceof Array && array[i] instanceof Array) {
      // recurse into the nested arrays
      if (!this[i].equals(array[i])) return false
    } else if (this[i] != array[i]) {
      // Warning - two different object instances will never be equal: {x:20} != {x:20}
      return false
    }
  }
  return true
}
// Hide method from for-in loops
Object.defineProperty(Array.prototype, 'equals', { enumerable: false })
Array.prototype.equals=函数(数组){
//如果另一个数组是falsy值,则返回
如果(!array)返回false
//比较长度-可以节省大量时间
if(this.length!=array.length)返回false
for(var i=0,l=this.length;i
看起来您正在扩展数组类/类型的原型。因此,它应该已经在包含您的
A.js
脚本的任何地方可用。不需要增加出口。 如果您使用某种“编译器”(汇总、网页包等)从不同的源代码构建单个JS文件,只需确保编译了
A.JS
,然后再执行其他函数/代码即可

但是,不鼓励像这样扩展基本类型,因为您永远不知道是否有其他东西不尝试使用相同的函数名扩展相同的类型,但结果不同,这在以后很难调试

您可以将其重构为独立函数。大概是这样的:

函数isArrayEqual(a,b){
//如果另一个数组是falsy值,则返回
如果(!a | |!b)返回false
//如果其中任何一个不是数组,则返回
如果(!Array.isArray(a)| |!Array.isArray(b))返回false
//比较长度-可以节省大量时间
如果(a.length!=b.length)返回false
对于(变量i=0,l=a.length;iconsole.log(“[1]vs[“1”]”,isArrayEqual([1],“1”]);//真的所以更好的办法是从中生成一个函数?你能帮我把它转换成独立的功能吗。我是一个递归函数。函数背后的想法是检查重构中的两个数组是否相等
[1,[2]]
,并且
[1,2]
将作为well@Miller我没有更改结果,原始代码也会失败(请尝试
[[1,2]]]。等于([[1,2]])
。但您是对的-这是一个错误。我再次更新了答案并修复了它,谢谢:)。是的,我理解你所做的,不怪你:)我只是想提一下。由于starter从另一个线程复制了这个示例,我建议使用库,因为需要一些知识来进行防弹比较fn。是的,在许多(大多数?)情况下,使用库可能是一个更好的解决方案,因为它可能需要更多的测试。但是如果一个人正在学习,我认为尝试编写代码来真正学习编写代码是很好的,即使这只是“重新发明轮子”:。我想你是从这里得到的?像lodash这样的库可以帮助您,您只能导入此函数,因此大小将很小。