比较两个“字符串”数组以检查它们是否相等

时间:2016-01-02 19:21:58

标签: javascript arrays

美好的一天,

我有两个字符串数组。字符串只是数字日期(例如:“01/01/2016”......)。

我想知道是否有一种好的/快速的方法来比较两个数组并从一个数组中删除字符串,这些数组在第二个数组中不存在。

示例

第一阵列:[“01/01/2016”,“02/02/2015”,“03/03/2014”]

第二阵列:[“01/01/2016”,“02/02/2015”]

应从第一个数组中删除字符串“03/03/2014”。

我已尝试对两个数组长度的()循环进行此操作,但它似乎非常慢,因为每个数组都是大(abt。1000+)索引,如下所示:

  for (var a = 0; a < oilDateArray.length; a++) {
          for (var b = 0; b < fuelDateArray.length; b++) {
            if (fuelDateArray[b] !== oilDateArray[a]) {
              console.log("fuelDateArray not present: " + fuelDateArray[b]);
            }
          }
        }

是否有特定的功能/方法,我可以使用它来更快地执行上述操作?

提前致谢,祝你有愉快的一天!

4 个答案:

答案 0 :(得分:2)

试试这个:

for (var i = 0; i < firstArray.length; i++){
    if (secondArray.indexOf(firstArray[i]) == -1){ // indexOf is -1 if not found
        firstArray.splice(i, 1); // Remove 1 value at index i
        i--; // To re-adjust the index value which is 1 less because of the splice
    }
}

它也可能有点慢,你可以试试你的阵列:https://jsfiddle.net/tyrsszaw/4

答案 1 :(得分:1)

使用jquery

$(数组1).filter(数组2);

答案 2 :(得分:1)

如果您有权访问Set

function intersect(arr1, arr2){
    var s = new Set(arr1);
    return arr2.filter(function(el){
        return s.has(el);
    });
}

答案 3 :(得分:0)

我使用jquery进行数组操作,我会根据你的需要编辑一个并粘贴到这里,希望这可以帮到你:

var arr1 = ["01/01/2016","02/02/2015", "03/03/2014"];
var arr2 = ["01/01/2016", "02/02/2015"];
var diff = [];

jQuery.grep(arr2, function(t) {
        if (jQuery.inArray(t, arr1) == -1) diff.push(t);
});

alert(diff);​ // what was different will be alerted 

我之前在stackoverflow上也发现了这个代码。

更新:以下是您可能感兴趣的与效果相关的主题

Performance of jQuery.grep vs. Array.filter

tldr; 它说grep快了大约3倍。所以坚持我的解决方案。 :)