3

私はこの配列を持っています:

suggestions = [ "the dog", 
                "the cat", 
                "the boat",
                "boat engine",
                "boat motor",
                "motor oil"
              ];

配列を反復処理して、特定の単語を含むすべてのエントリを削除するにはどうすればよいですか?

たとえば、「the」という単語を含むすべての全体を削除すると、配列は次のようになります。

[ "boat engine",
  "boat motor",
  "motor oil"
];
4

4 に答える 4

1

私はこのセットアップを使用します:

var suggestions = [
    "the dog",
    "the cat",
    "he went then",
    "boat engine",
    "another either thing",
    "some string the whatever"
];

function filterWord(arr, filter) {
    var i = arr.length, cur,
        re = new RegExp("\\b" + filter + "\\b");
    while (i--) {
        cur = arr[i];
        if (re.test(cur)) {
            arr.splice(i, 1);
        }
    }
}

filterWord(suggestions, "the");
console.log(suggestions);

デモ: http://jsfiddle.net/Kacju/

逆方向にループし、(識別子を単語境界として使用して) 検索する単語を正しくチェックし、\b一致するものを削除します。

一致を含む新しい配列を生成する場合は、通常どおりループし、push一致しないものだけを新しい配列に追加します。これを使用できます:

var suggestions = [
    "the dog",
    "the cat",
    "he went then",
    "boat engine",
    "another either thing",
    "some string the whatever"
];

function filterWord(arr, filter) {
    var i, j, cur, ret = [],
        re = new RegExp("\\b" + filter + "\\b");
    for (i = 0, j = arr.length; i < j; i++) {
        cur = arr[i];
        if (!re.test(cur)) {
            ret.push(cur);
        }
    }
    return ret;
}

var newSuggestions = filterWord(suggestions, "the");
console.log(newSuggestions);

デモ: http://jsfiddle.net/Kacju/1/

于 2013-05-23T06:06:45.860 に答える
0

正規表現を使用してみてください

var suggestions = [ "the dog", 
                "the cat", 
                "the boat",
                "boat engine",
                "boat motor",
                "motor oil"
              ];
var filtered = [],
    len = suggestions.length,
    val,
    checkCondition = /\bthe\b/;

for (var i =0; i < len; ++i) {
    val = suggestions[i];
    if (!checkCondition.test(val)) {
        filtered.push(val);
    }
}

チェックフィドル

于 2013-05-23T06:05:22.353 に答える