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
;-)这可能只是~
运算符的唯一主流用法(按位不)…