Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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_Duplicates - Fatal编程技术网

Javascript 区分阵列(不修改原始阵列)

Javascript 区分阵列(不修改原始阵列),javascript,arrays,duplicates,Javascript,Arrays,Duplicates,目标 function diff(arr1, arr2) { var diffArr = []; if (arr1.length >= arr2.length) { for (var i = 0; i < arr1.length; i++){ if (arr2.indexOf(arr1[i]) < 0) { diffArr.push(arr1[i]); } } } else { for (

目标

function diff(arr1, arr2) {
  var diffArr = [];

  if (arr1.length >= arr2.length) {
    for (var i = 0; i < arr1.length; i++){
      if (arr2.indexOf(arr1[i]) < 0) {
          diffArr.push(arr1[i]);
          }
    }
  } else {
    for (var j = 0; j < arr2.length; j++){
      if (arr1.indexOf(arr2[j]) < 0) {
        diffArr.push(arr2[j]);
      }
    }
  }
  return diffArr;
}
我试图强调两个数组之间的数据引用。请注意,arr1和arr2的长度不同,并且有多种类型(字符串和数字)

我的代码

function diff(arr1, arr2) {
  var diffArr = [];

  if (arr1.length >= arr2.length) {
    for (var i = 0; i < arr1.length; i++){
      if (arr2.indexOf(arr1[i]) < 0) {
          diffArr.push(arr1[i]);
          }
    }
  } else {
    for (var j = 0; j < arr2.length; j++){
      if (arr1.indexOf(arr2[j]) < 0) {
        diffArr.push(arr2[j]);
      }
    }
  }
  return diffArr;
}
我非常确定我的代码只通过diffArr.push返回其中一个数组中的重复项(即使两个数组中都有唯一的值)。然而,我不确定如何克服这个问题

我的推荐信


您的代码目前只在一个数组中爬行(我们称之为A)并推入B中不存在的所有A值。您永远不会以另一种方式推入A中不存在的B值。也不需要基于哪个数组更长而有不同的行为。以下是一个简单的最终答案:

function diff(arr1, arr2) {
  var diffArr = [];
  for (var i = 0; i < arr1.length; i++) {
    if (arr2.indexOf(arr1[i]) < 0) diffArr.push(arr1[i]);
  }
  for (var j = 0; j < arr2.length; j++) {
    if (arr1.indexOf(arr2[j]) < 0) diffArr.push(arr2[j]);
  }
  return diffArr;
}
功能差异(arr1、arr2){
var diffArr=[];
对于(变量i=0;i
并且以一种更实用的方式:

function diff(arr1, arr2) {
  var elsIn1Not2 = arr1.filter(function(el){ return arr2.indexOf(el) < 0; });
  var elsIn2Not1 = arr2.filter(function(el){ return arr1.indexOf(el) < 0; });
  return elsIn1Not2.concat(elsIn2Not1);
}
功能差异(arr1、arr2){
var elsinnot2=arr1.filter(函数(el){return arr2.indexOf(el)<0;});
var elsIn2Not1=arr2.filter(函数(el){return arr1.indexOf(el)<0;});
返回elsinnot2.concat(elsinnot1);
}
这两个函数都返回
['cat'、'fish',3'dog']
作为示例。

函数差异(arr1、arr2){
function diff(arr1, arr2) {
  var diffArr = {};

  if (arr1.length >= arr2.length) {
    for (var i = 0; i < arr1.length; i++){
      if (arr2.indexOf(arr1[i]) < 0) {
          diffArr[arr1[i]] = 1;
          }
    }
  } else {
    for (var j = 0; j < arr2.length; j++){
      if (arr1.indexOf(arr2[j]) < 0) {
        diffArr[arr2[j]] = 2;
      }
    }
  }
  return diffArr.keys();
}
var diffArr={}; 如果(arr1.length>=arr2.length){ 对于(变量i=0;i
@Donal我不认为这是真的-indexOf()可以用于数组(),但这并不能解决作者的问题,这似乎是“我如何才能得到一个数组,其中包含两个数组都不共享的所有元素。”如果你保留这个,如果不是,那么你只能得到一个单向的差异。谢谢你-我一直在努力开发一种更实用的编程方式。我在使用.filter()时遇到了一些问题(MDN示例不太好)。向上投票并标记为正确答案!谢谢。:-)如果你真的想让它简洁,你可以改变
返回arr2.indexOf(el)<0
返回~arr2.indexOf(el
;-)这可能只是
~
运算符的唯一主流用法(按位不)…