0

私は次のようなJavaScript配列を持っています

var main_array = ["allen~1", "ajay~2", "raj~3"];

次のような別の配列があります

var sub_array=["allen", "ajay"];

編集

sub_array の各値が main_array にあるかどうか、(つまり、「allen」が ["allen~1", "ajay~2", "raj~3"]にあるかどうか) を確認する必要があるため、一致しない値はアレイから削除されます。その結果、「raj~3」を main_array から削除する必要があります

これを達成する方法は?

indexOf()、match()を試しましたが、「allen~1」のような完全一致が必要なため失敗します。

前もって感謝します

4

7 に答える 7

1

あなたの質問はそれほど明確ではないにしても親切ですが、達成したいのは、sub_array の一部である main_array からのすべての値を含む配列だと思いますか? あなたの例では、結果の配列は

["allen~1", "ajay~2"]

? もしそうなら、これを見てください:

次に、サブ配列をループして、main_array をチェックインする必要があります。

var i, j, result = [];
for (i = 0; i < sub_array.length; i++) {
  for (j = 0; j < main_array.length; j++) {
    if (main_array[j].indexOf(sub_array[i]) != -1) {
      result.push(main_array[j]);
    }
  }
}

動作中の jsfiddle を参照してください: http://jsfiddle.net/yf7Dw/

編集: Felix Kings の回答がおそらく最適ですが、ポリフィルを使用したくない場合や、古い IE をサポートする必要がある場合は、私のソリューションを使用できます

edit2:メイン配列から要素を削除したい場合は、Array.spliceが役に立ちます。更新されたフィドルを参照してください: http://jsfiddle.net/yf7Dw/2/

var i, j;
for (i = 0; i < sub_array.length; i++) {
  for (j = 0; j < main_array.length; j++) {
    if (main_array[j].indexOf(sub_array[i]) != -1) {
      main_array.splice(j, 1);
    }
  }
}
于 2013-06-11T09:55:02.353 に答える
1

.every [MDN].some [MDN ] を使用できます:

var all_contained = sub_array.every(function(str) {
    return main_array.some(function(v) {
        return v.indexOf(str) > -1;
    });
});

古い IE バージョンのポリフィルのドキュメントをご覧ください。


要素を削除したい場合は、.filter [MDN]と正規表現を使用できます。

// creates /allen|ajay/
var pattern = new RegExp(sub_array.join('|'));
var filtered = main_array.filter(function(value) {
    return pattern.test(value);
});

テストが返す値falseは、最終的な配列には含まれません。

の値にsub_array特殊な正規表現文字を含めることができる場合は、最初にそれらをエスケープする必要があります: Is there a RegExp.escape function in Javascript? .

于 2013-06-11T09:50:17.440 に答える
0

試す

            var main_array = ["allen~1", "ajay~2", "raj~3"];
        var main_array1 = new Array();

        for (var i = 0; i < main_array.length; i++) {
            main_array1.push(main_array[i].split('~')[0])
        }
        var sub_array = ["allen", "ajay"];
        if ($.inArray('allen', main_array1) == -1) {
            alert('false');
        }
        else {
            alert('true');
        }
于 2013-06-11T09:54:42.843 に答える
0

試す

var globalBoolean  =true;
$.each(subarray, function (index,value) {
    if ( !($.inArray(value, main_array) > -1)){
     globalBoolean =false;
    }
});

ならばglobalBoolean等しいtrue

于 2013-06-11T09:45:42.390 に答える
0

RegExp検索された文字列からaを作成し、それを使用matchします

string.match(new RegExp(searchedString + ".*"));

また

string.match(new RegExp(searchedString + "~[0-9]+"));
于 2013-06-11T09:49:27.400 に答える
0

ちょうど別の解決策...

var filtered_array = jQuery.grep(main_array, function(n1, i1){
    var y = jQuery.grep(sub_array, function(n2, i2){
        return n1.indexOf(n2) !== -1; // substring found?
    });
    return y.length; // 0 == false
});
于 2013-06-11T10:01:44.657 に答える
0

アンダースコア js を取得します。次に、これを行います:

var myarray = ["Iam","Iamme","meIam"];
var sub_ar = ["am", "amI", "amme"];
_.each(myarray, function(x){
    _.each(sub_ar, function(y){
        if(x == y)
        {
           console.log(y + " is a match");
    });
 });

ごめん。部分文字列を探しているため、これは機能しません。私の悪い。これを試して:

var myarray = ["Iam","Iamme","meIam"];
var sub_ar = ["am", "amI", "amme"];
_.each(myarray, function(x){
   _.each(sub_ar, function(y){
      if(x.indexOf(y) !== -1)
      {
        console.log("match found");
   });
});
于 2013-06-11T10:04:30.283 に答える