这是一个相当基本的问题,但我正在寻找最佳解决方案。我有2个javascript 字符串数组。让我们说
A: ["Stark", "Targaryen", "Lannister", "Baratheon"]
B: ["Greyjoy", "Tyrell", "Stark"]
由于重复“Stark”,我想从数组A中删除它,我的结果应该是(保留排序)
A: ["Targaryen", "Lannister", "Baratheon"]
我真的不关心第二个数组B.核心javascript或jQuery中有什么东西可以帮助我吗? PS:不要使用IF语句发布嵌套for循环。可能是更聪明的东西:)
答案 0 :(得分: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);
答案 1 :(得分:4)
我建议你使用underscore.js lib,特别是差异函数。 http://underscorejs.org/#difference
_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]
此库中还有其他有用的工具。
答案 2 :(得分:1)
来自另一个answer
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"]
答案 3 :(得分: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);
});