あなたの質問が、あなたのために検索を行う組み込みのものがあるかどうかである場合、いいえ、ありません。基本的に、String#indexOf
または正規表現を使用して配列をループし、文字列をテストします。
ループには、少なくとも 3 つの選択肢があります。
退屈な古いfor
ループ。
ES5 対応環境 (または shim を使用) では、Array#filter
.
jQuery を使用しているため、jQuery.map
.
退屈な古いfor
ループの例:
function search(source, name) {
var results = [];
var index;
var entry;
name = name.toUpperCase();
for (index = 0; index < source.length; ++index) {
entry = source[index];
if (entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1) {
results.push(entry);
}
}
return results;
}
as でそれを呼び出し、目的の名前フラグメントをobj.list
asで呼び出す場所。source
name
または、空白のエントリまたは名前のないエントリがある可能性がある場合は、次のように変更if
します。
if (entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1) {
Array#filter
例:
function search(source, name) {
var results;
name = name.toUpperCase();
results = source.filter(function(entry) {
return entry.name.toUpperCase().indexOf(name) !== -1;
});
return results;
}
また、空白のエントリがある可能性がある場合 (たとえば、undefined
不足ではなく、不足しているfilter
エントリをスキップします)、内部の戻り値を次のように変更します。
return entry && entry.name && entry.name.toUpperCase().indexOf(name) !== -1;
jQuery.map
例 (ここでは、通常はjQuery
=を想定しています。使用している場合はに変更します):$
$
jQuery
noConflict
function search(source, name) {
var results;
name = name.toUpperCase();
results = $.map(source, function(entry) {
var match = entry.name.toUpperCase().indexOf(name) !== -1;
return match ? entry : null;
});
return results;
}
(また、必要に応じてそこに追加entry && entry.name &&
します。)