Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.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 - Fatal编程技术网

从javascript中的两个不同数组中获取唯一项

从javascript中的两个不同数组中获取唯一项,javascript,Javascript,我有两个数组 var a = [4,8,9,7]; var b = [1,5,7,3,9]; 我想要结果 [4,8,1,5,3] 我试过使用过滤器- function diffArray(arr1, arr2) { var newArr = []; var newArr2 = []; newArr = arr1.filter(function(e) { return arr2.indexOf(e) < 0; }); newArr2 = arr2.filter(function(

我有两个数组

var a = [4,8,9,7];
var b = [1,5,7,3,9];
我想要结果

 [4,8,1,5,3]
我试过使用过滤器-

function diffArray(arr1, arr2) {
var newArr = [];
var newArr2 = [];
newArr = arr1.filter(function(e) {
  return arr2.indexOf(e) < 0;
});

newArr2 = arr2.filter(function(e) {
  return arr1.indexOf(e) < 0;
});
var arr = newArr.concat(newArr2);
 return arr;
}
函数diffArray(arr1、arr2){
var newArr=[];
var newArr2=[];
newArr=arr1.滤波器(函数(e){
返回arr2.indexOf(e)<0;
});
newArr2=arr2.filter(函数(e){
返回arr1.indexOf(e)<0;
});
var arr=新arr.concat(新ARR2);
返回arr;
}

是否有更好的方法来获得相同的结果。

您可以检查项目的索引和最后一个索引,并仅在索引相同时进行筛选

var a=[4,8,9,7],
b=[1,5,7,3,9],
unique=a.concat(b).过滤器((v,uu,a)=>a.indexOf(v)==a.lastIndexOf(v));
console.log(唯一)我可以这样做

var a = [4, 8, 9, 7];
var b = [1, 5, 7, 3, 9];
var c = b.reduce((r, o) => {
if (r.indexOf(o) !== -1) {
    r.splice(r.indexOf(o), 1);
} else {
 r.push(o);
}
 return r;
}, a);
console.log(c);

可能重复的,所以你想要对称的差异?在两个数组上循环,将数组值作为键分配给值为
1
的对象,如果该键已经存在,则将该值设置为
0
,然后仅获取值为
1
的键(使用
object.entries
过滤器
)。可能重复@KhánhBùiĐứ不,这不是关于这里需要的对称差。我在Codewars中看到过这个问题。comBut为什么这样更好?不,先生,Nina Scholz的答案是最好的。你可以去看看