Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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,我有两个javascript数组-: var array1 = ['12','1','10','19','100']; var array2 = ['12','10','19']; 我需要一个方法从两个数组中获取唯一值,并将它们放入array3中 Array3应为-: var array3 = ['1','100']; 谢谢你的帮助 var array3 = array1.filter(function(obj) { return array2.indexOf(obj) == -1; });

我有两个javascript数组-:

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
我需要一个方法从两个数组中获取唯一值,并将它们放入array3中
Array3
应为-:

var array3 = ['1','100'];
谢谢你的帮助

var array3 = array1.filter(function(obj) { return array2.indexOf(obj) == -1; });
阵列上的MDN#过滤器:

包括适用于旧浏览器的polyfill。

类似的内容

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
var o = {};
for(var i in array1) {
    o[i] = 1;
}
for(var i in array2) {
    o[i] = 0;
}
var array3 = [];
for(var i in o) {
    if(o[i] == 1) {
        array3.push(i);
    }
}

与上述类似,但可用于两个以上的阵列

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];
var i = 0;
var hist = {};
var array3 = [];

buildhist(array1);
buildhist(array2);

for (i in hist) {
    if (hist[i] === 1) {
        array3.push(i);
    }
}

console.log(array3);

function buildhist(arr) {
    var i;
    for (i = arr.length - 1; i >= 0; i--) {
        if (hist[arr[i]] === undefined) {
            hist[arr[i]] = 0;
        }
        hist[arr[i]]++;
    }
}
可以这样称呼:

var unique = [1, 2, 2, 6, 8, 5, 6, 8].Unique();
array3
将只有唯一的值


这也可以在两个循环中完成这项工作,这非常便宜。应该注意,sort()和filter()是ECMA5函数,在旧的浏览器中不受支持。此外,我通常使用类似下划线的库,因此我不必为我处理的每个项目重写这些函数,下划线有一个.unique()方法显然代码更少,并且更清楚地说明了操作的意图

,加上一点ES6魔力,它可以相当简洁。请注意,如果两个数组中都有唯一的项,我们需要同时进行检查

var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];


var newArr,temp,temp1;


    temp=array1.filter(function(el) 
              {
                return arr2.indexOf(el) == -1; 

              });

    temp1=array2.filter(function(el) 
              {
                return arr1.indexOf(el) == -1; 

              });

  newArr=temp.concat(temp1);


  return newArr;

}
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [1, 3, 8];

let unique1 = arr1.filter((o) => arr2.indexOf(o) === -1);
let unique2 = arr2.filter((o) => arr1.indexOf(o) === -1);

const unique = unique1.concat(unique2);

console.log(unique);
// >> [2, 4, 5, 8]

回答得好,布雷特。非常感谢,这会导致o(n^2)复杂度,在处理大型数组时会变得非常慢。但希望我不会有这么大的数组导致o(n^2)复杂度。感谢如果array2中有任何值在array1中不存在,则它将不会显示。例如,var array1=[1,3,5,7,9];var array2=[1,2,3,5100];将导致[7,9]而不是[2,7,9100],您也需要以另一种方式进行检查。此答案不正确。请查看下划线.js文档。该库提供了许多对象和数组实用程序,可在客户端和服务器端使用。这里有一个更通用的答案:如果数组1具有数组2不具有的唯一值,则该库不起作用。是。我的解是不对称的。最初的问题并不完全清楚这是否是一项要求。如果
arr2
包含一个唯一的数字,那么它将不会被添加到
unique
@curly_括号中-谢谢,编辑!现在不是很简洁,可能有一种更简洁的方法,但至少可读性很好。我这样做了,但我的代码相当慢。有没有最佳方法?@SterlingDiaz如果您的值都是正数,那么您可以将这些值用作另一个数组中的索引来进行优化,因此只有值集是唯一的
var unique = [1, 2, 2, 6, 8, 5, 6, 8].Unique();
var array3 = array1.concat(array2);

array3 = array3.sort(function(a, b) { return a > b; });
array3 = array3.filter(function(num, index) { return num !== array3[index + 1]; });
var array1 = ['12','1','10','19','100'];
var array2 = ['12','10','19'];


var newArr,temp,temp1;


    temp=array1.filter(function(el) 
              {
                return arr2.indexOf(el) == -1; 

              });

    temp1=array2.filter(function(el) 
              {
                return arr1.indexOf(el) == -1; 

              });

  newArr=temp.concat(temp1);


  return newArr;

}
const arr1 = [1, 2, 3, 4, 5];
const arr2 = [1, 3, 8];

let unique1 = arr1.filter((o) => arr2.indexOf(o) === -1);
let unique2 = arr2.filter((o) => arr1.indexOf(o) === -1);

const unique = unique1.concat(unique2);

console.log(unique);
// >> [2, 4, 5, 8]