Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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中比较数组的有效方法_Javascript_Arrays - Fatal编程技术网

javascript中比较数组的有效方法

javascript中比较数组的有效方法,javascript,arrays,Javascript,Arrays,我需要比较两个数组中的元素,如下所示: arr1[0] ? arr2[0] arr1[1] ? arr2[1] arr1[2] ? arr2[2] etc. 我写了一些代码,但当我尝试在每个数组上比较1000个类似这样的对象时,速度似乎很慢: { "id":"event707", "name":"Custom707", "type":"disabled", "default_metric":false, "participation":"disabled",

我需要比较两个数组中的元素,如下所示:

arr1[0] ? arr2[0]
arr1[1] ? arr2[1]
arr1[2] ? arr2[2]
etc.
我写了一些代码,但当我尝试在每个数组上比较1000个类似这样的对象时,速度似乎很慢:

{
   "id":"event707",
   "name":"Custom707",
   "type":"disabled",
   "default_metric":false,
   "participation":"disabled",
   "serialization":"always_record"
}
这就是我的函数的样子(只是两个具有硬编码数据的数组的示例)

函数比较(){
var阶跃=0;
var FROUTS1=[{“苹果”:25},{“班纳纳”:36},{“橙色”:6}];
var FROUTS2=[{“苹果”:25},{“班纳纳”:36},{“橙色”:6}];

对于(var i=0;i使用下划线数组函数


没有库的简单函数:

var arr1=[1,2,3];
var arr2=[1,2,4];
//此函数获取一个项、该项的索引和另一个数组来比较该项。
功能比较(项目、索引、数组2){
返回数组2[索引]==项;
}
//forEach方法将该项作为第一个参数
//索引作为第二个参数
//和数组作为第三个参数。所有参数都是可选的。
arr1.forEach(功能(项目、索引){
日志(比较(项、索引、arr2));

})随着
对象.prototype.compare()
数组.prototype.compare()
的发明,这项工作变得非常简单。数组比较可以处理原语和引用类型项。对象比较肤浅。让我们看看它是如何工作的

Object.prototype.compare=函数(o){
var ok=Object.keys(这个);
返回typeof o==“object”&&ok.length==object.keys(o.length?ok.every(k=>this[k]==o[k]):false;
};
Array.prototype.compare=函数(a){
返回这个.every((e,i)=>a[i]==“object”?a[i]的类型。比较(e):a[i]==e);
};
var FROUTS1=[{“苹果”:25},{“班纳纳”:36},{“橙色”:6}],
水果2=[{“苹果”:25},{“班纳纳”:36},{“橙色”:6}];

console.log(fruits1.compare(fruits2));
对于
对象
类,可以使用以下
静态
方法:对象.equals

Object.equals=function(a,b){if(a===b)return!0;if(!(a.instanceof Object&&b instanceof Object))return!1;if(a.valueOf()==b.valueOf())return!0;if(a.constructor!==b.constructor)return!1;for(a中的变量c)if(a.hasOwnProperty(c)){(!b.hasOwnProperty(c))return!1;if(a[c]!==b[c]){如果(b.hasOwnProperty(c)和&!a.hasOwnProperty(c))返回!1;返回!0};
console.log(
`“[1,2,3]==[1,2,3]”?`,Object.equals([1,2,3],[1,2,3])
);
console.log(
`“[{“苹果”:25},{“班纳纳”:36},{“橙色”:6}]=[{“苹果”:25},{“班纳纳”:36},{“橙色”:6}]”?`,对象

);
按照显示比较的方式,您只需要一个索引器,然后就可以使用i来比较结果1[i]和结果2[i]。我真的看不出step变量的原因/必要性。因此,如果您也需要基于索引进行比较(例如:结果1[1]必须等于结果2[1],那么我认为您需要简化算法)。这样,您就可以说两个数组不一样了,因为两个数组之间的长度不同。如果是这样,请在数组的相同位置出现不匹配时立即退出循环。您是对的,不需要step变量。我更改了代码,现在响应时间缩短了1分钟!谢谢!
function compare() {
  var step = 0;
  var fruits1 = [{"apple":25},{"bannana":36},{"orange":6}];
  var fruits2 = [{"apple":25},{"bannana":36},{"orange":6}];
  for(var i=0;i<fruits1.length;i++) {
    for(var j=step;j<fruits2.length;j++) {
      console.log("FRUIT1");
      console.log(JSON.stringify(fruits1[i]));
      console.log("FRUIT2");
      console.log(JSON.stringify(fruits2[j]));
      console.log("----------------------");
      if(JSON.stringify(fruits1[i])!== JSON.stringify(fruits2[j])) {
        //do something
      }
      step = step + 1;
      break;
    }
  }
}