5

これはかなり基本的な質問ですが、最適な解決策を探しています。2つのjavascript文字列配列があります。まあ言ってみれば

A: ["Stark", "Targaryen", "Lannister", "Baratheon"]
B: ["Greyjoy", "Tyrell", "Stark"]

「Stark」が繰り返されているので、配列Aから削除したいのですが、結果は(順序は保持されたまま)になります。

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

私は2番目の配列Bを本当に気にしません。コアjavascriptまたはjQueryに何か役立つものはありますか?PS:IFステートメントを使用してネストされたforループを投稿しないでください。おそらくもっと賢いもの:)

4

4 に答える 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);​
于 2012-09-06T12:37:03.987 に答える
4

underscore.js lib、特に差分関数を使用することをお勧めします。 http://underscorejs.org/#difference

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

このライブラリには他にも便利なツールがあります。

于 2012-09-06T12:32:58.320 に答える
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"]
于 2012-09-06T12:35:46.850 に答える
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);
});
于 2012-09-06T12:45:04.090 に答える