正規表現フィルターのアイデアに感謝しますが、以前のソリューションは、マルチレベルフィールドであるオブジェクトケースのような一般的なケースでは機能しません。
例えば:
<div ng-repeat="item in workers | regex:'meta.fullname.name':'^[r|R]' ">
私の解決策は次のとおりです。
.filter('regex', function() {
return function(input, field, regex) {
var f, fields, i, j, out, patt;
if (input != null) {
patt = new RegExp(regex);
i = 0;
out = [];
while (i < input.length) {
fields = field.split('.').reverse();
j = input[i];
while (fields.length > 0) {
f = fields.pop();
j = j[f];
}
if (patt.test(j)) {
out.push(input[i]);
}
i++;
}
return out;
}
};
});
これは、マルチレベルのオブジェクトまたは1つのレベルの属性を持つ単純なオブジェクトに対して機能します。
遅くなりますが、別の角度から見るのに役立つことを願っています。
これはCoffeeScriptのコードであり、よりクリーンです。
angular.module('yourApp')
.filter 'regex', ->
(input, field, regex) ->
if input?
patt = new RegExp(regex)
i = 0
out = []
while i < input.length
fields = field.split('.').reverse()
j = input[i]
while fields.length > 0
f = fields.pop()
j = j[f]
if patt.test(j)
out.push input[i]
i++
return out