如果一个数组中的字符串也出现在另一个数组中,如何移除这些字符串?

5
这是一个非常基本的问题,但我正在寻找最佳解决方案。我有两个JavaScript 字符串数组,假设:
A: ["Stark", "Targaryen", "Lannister", "Baratheon"]
B: ["Greyjoy", "Tyrell", "Stark"]

由于"Stark"重复,我想从数组A中删除它,并且我的结果应该是(保留排序)

A: ["Targaryen", "Lannister", "Baratheon"]

我不是很关心第二个数组B。是否有核心JavaScript或jQuery中的某些内容可以帮助我? PS:不要发布具有IF语句的嵌套for循环。可能有更聪明的方法 :)

1
我没有直接的答案,但如果您可以将数组转换为对象,您可能可以使用以下代码:if (B['Stark']) delete(A['Stark']); - Zathrus Writer
4个回答

5

一个完整的jQuery解决方案:

var a = ["Stark", "Targaryen", "Lannister", "Baratheon"];
var b = ["Greyjoy", "Tyrell", "Stark"];

var result = $.grep(a, function(n, i) {
    return $.inArray(n, b) < 0;
});

alert(result);​

4

我建议您使用underscore.js库,特别是其中的difference函数。 http://underscorejs.org/#difference

_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]

这个库中还有其他有用的工具。

我已经在我的项目中使用了几个jQuery库。现在不太想再添加更多了。谢谢! - karan

1

从另一个答案

Array.prototype.diff = function(a) {
    return this.filter(function(i) {return !(a.indexOf(i) > -1);});
};

////////////////////  
// Examples  
////////////////////

[1,2,3,4,5,6].diff( [3,4,5] );  
// => [1, 2, 6]

["test1","test2","test3","test4","test5","test6"].diff(["test1","test2","test3","test4"]);      
// => ["test5", "test6"]

谢谢。我应该更努力地寻找。 - karan

0

也许你会喜欢

$(function(){
   var A = ["Stark", "Targaryen", "Lannister", "Baratheon"];
   var B = ["Greyjoy", "Tyrell", "Stark"];

    $.each(A, function (key, value) {
        if($.inArray(value, B) > -1) {
            A.splice($.inArray(value, B), 1);
        }
    });

    document.write(A);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接