Javascript 比较两个数组中的";“字符串”;检查它们是否相等

Javascript 比较两个数组中的";“字符串”;检查它们是否相等,javascript,arrays,Javascript,Arrays,你好 我有两个字符串数组。字符串只是数字日期(例如:“01/01/2016”…) 我想知道是否有一种好的/快速的方法来比较两个数组,并从一个数组中删除第二个数组中不存在的字符串 示例: 第一个阵列:[“01/01/2016”、“02/02/2015”、“03/03/2014”] 第二个数组:[“01/01/2016”、“02/02/2015”] 应从第一个数组中删除字符串“03/03/2014” 虽然我尝试过对两个数组长度的()循环执行此操作,但速度似乎非常慢,因为每个数组都有大的索引(大约10

你好

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

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

示例

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

第二个数组:[“01/01/2016”、“02/02/2015”]

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

虽然我尝试过对两个数组长度的()循环执行此操作,但速度似乎非常慢,因为每个数组都有大的索引(大约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]);
            }
          }
        }
for(var a=0;a
是否有一个特定的功能/方法,我可以使用它来更快地执行上述操作

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

使用jquery


$(array1).过滤器(array2)

我使用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上发现了这段代码

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

tldr; 它说grep的速度快了大约3倍。因此,请坚持我的解决方案。:)

试试这个:

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
    }
}
for(变量i=0;i

它也可能有点慢,您可以尝试使用您的数组:

如果您有权访问
Set

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


我不认为答案会更快。使用for()循环检查两个数组(每个数组都有1000多个字符串)的速度非常慢。是否可以将数据集改为使用排序的UNIX时间戳?如果可以的话,我可以使用时间复杂度
O(n)
创建一个答案。我从web服务获取这些日期作为数据。我可以将其转换为unix或epoch time,但这可能不是一种非常有效的方法。它将比使用出现在这里的
O(n²)
O(n*m)
算法更有效,考虑到转换为unix需要
O(n)
并且不需要排序。谢谢。我会试试这条路。谢谢!如果比较大数组(1000多个项目),性能如何?如果您要在客户端使用与javascript相关的任何东西,这取决于实际的客户端。您能进一步解释您的情况吗?比如,若您需要从api或任何数据库连接获取数据?或者只是一些简单的日期?我从web服务(xml)获取这些日期,然后将它们存储在一个数组中。我编辑了关于性能问题的答案。您需要更改
您是对的@squint,只是一个错误您仍然需要调整
I
。执行
.splice()
后,下一个索引将成为当前索引,因此
i++
将跳过它。在
.splice()
行下,添加
i--
。哦,好的,我明白你的意思了mean@squint这不管用。我得到第一个数组的长度为0。这是我使用的代码:for(var g=0;g$
函数,然后使用
.filter()
在它上面。它不是,它是有效的……我只是试过了……在给我negs之前,你应该自己尝试代码。没有文档支持将字符串数组传递给
$
函数,然后在其上使用
.filter()
。请在使用(或建议)之前阅读文档方法。它现在可以正常工作,这真是太棒了,但它是一个不受支持的“功能”“并且可以在任何较小的点发布上中断…而且没有迹象表明OP首先使用jQuery,因此加载它只是为了做这个简单的小操作是愚蠢的。好吧,现在我知道你要做什么了,你是正确的长期目标…我只是想帮助你找到一个简单的解决方案。”