2011-11-18 456 views
5

我困在这里。我有2个数组,我不知道每个数组的长度,他们可以是相同的长度或不是,我不知道,但我需要创建一个新的数组与不常见的数字只是一个(2, 10)。如何比较两个不同长度的数组,如果你不知道每个在JavaScript中的长度?

对于这种情况:

var a = [2,4,10]; 
    var b = [1,4]; 

    var newArray = []; 

    if(a.length >= b.length){ 
     for(var i =0; i < a.length; i++){ 
      for(var j =0; j < b.length; j++){ 
       if(a[i] !=b [j]){ 
        newArray.push(b);   
       }   
      } 
     } 
    }else{} 

我不知道为什么我的代码永远不会到达的第一个条件,我不知道当b具有比更长度做什么。

+0

你想不同的行为时,A比B更短?或者这是企图使它工作? – BudgieInWA

+0

它试图使它工作 – bentham

+0

此外,两个数字是相同的,但不是在相同的位置认为是相同的? – BudgieInWA

回答

7

如果我正确理解您的要求,您的代码似乎有逻辑错误。

该代码将把a中不在b中的所有元素放入newArray

var a = [2, 4, 10]; 
var b = [1, 4]; 

var newArray = []; 

for (var i = 0; i < a.length; i++) { 
    // we want to know if a[i] is found in b 
    var match = false; // we haven't found it yet 
    for (var j = 0; j < b.length; j++) { 
     if (a[i] == b[j]) { 
      // we have found a[i] in b, so we can stop searching 
      match = true; 
      break; 
     } 
     // if we never find a[i] in b, the for loop will simply end, 
     // and match will remain false 
    } 
    // add a[i] to newArray only if we didn't find a match. 
    if (!match) { 
     newArray.push(a[i]); 
    } 
} 

为了澄清,如果

a = [2, 4, 10]; 
b = [4, 3, 11, 12]; 

然后newArray[2,10]

+0

不返回2和10谢谢它返回1,4,1,4 – bentham

+0

我提醒newArray,我得到1,4,1,4我仍然试图谢谢回答我不知道为什么你的代码不工作,你有检查你的代码? – bentham

+0

@Qeorge,我发现了错误。将第三行更改为'newArray.push(a [i]);',就像我在编辑中一样。 – BudgieInWA

2

试试这个

var a = [2,4,10]; 
var b = [1,4]; 
var nonCommonArray = []; 
for(var i=0;i<a.length;i++){ 
    if(!eleContainsInArray(b,a[i])){ 
     nonCommonArray.push(a[i]); 
    } 
} 

function eleContainsInArray(arr,element){ 
    if(arr != null && arr.length >0){ 
     for(var i=0;i<arr.length;i++){ 
      if(arr[i] == element) 
       return true; 
     } 
    } 
    return false; 
} 
+0

感谢您的回答我已经接受了以前的答案,但让我检查 – bentham

+0

@bentham你是怎么找到这个的? – Magpie

相关问题