【问题标题】:how to compare two arrays of different length if you dont know the length of each one in javascript?如果您不知道javascript中每个数组的长度,如何比较两个不同长度的数组?
【发布时间】:2011-12-31 23:04:06
【问题描述】:

我陷入了困境。我有 2 个数组,我不知道每个数组的长度,它们可以是相同的长度,也可以不是,我不知道,但我需要创建一个新数组,其中的数字在 (2, 10).

对于这种情况:

    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 的长度大于 a 时该怎么办。

【问题讨论】:

  • 当 a 比 b 短时你想要不同的行为吗?还是试图让它发挥作用?
  • 试图让它发挥作用
  • 另外,两个相同但位置不同的数字是否认为相同?
  • 是的,它们是一样的,我的意思是 2 和 10
  • 在这种情况下,我下面的回答应该可以解决您的问题。验证底部的说明是否是您正在寻找的结果。

标签: javascript arrays for-loop


【解决方案1】:

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

此代码会将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]

【讨论】:

  • 我提醒 newArray 并得到 1,4,1,4 我仍在尝试 感谢您的回答 我不知道为什么您的代码不起作用,您检查过您的代码吗?
  • @Qeorge,我发现了错误。正如我在编辑中所做的那样,将最后第三行更改为 newArray.push(a[i]);
  • 是的,它工作得很好哇!!真的很感谢你救了我的命
  • @George,我鼓励您尝试了解代码为什么有效,以及为什么不需要检查哪个数组更长。想想你试图解决的问题以及代码应该采取哪些步骤来获得解决方案。
  • 感谢@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;
}

【讨论】:

  • 感谢您的回答我已经接受了之前的回答,但让我检查一下
  • @bentham 你是怎么找到这个的?
猜你喜欢
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多