美好的一天,
我有两个字符串数组。字符串只是数字日期(例如:“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]);
}
}
}
是否有特定的功能/方法,我可以使用它来更快地执行上述操作?
提前致谢,祝你有愉快的一天!
答案 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倍。所以坚持我的解决方案。 :)