Другое событие NullPointerException
возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.
String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals
для гарантированного непустого объекта.
Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null
.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
System.out.println(phrase.equals(keyPhrase));
}
Чтобы фильтровать один тип, вы можете:
<div ng-repeat="hash in hashes | filter: {type:'foo'}">
Чтобы фильтровать массив, вам не нужен полностью настраиваемый фильтр, но я бы использовал фильтр предикатов, который вы можете передать Угловой фильтр. Вот фильтр, предполагающий ваш массив type
:
$scope.filterArray = function(hash) {
return ($scope.types.indexOf(hash.type) !== -1);
};
Используется следующим образом:
<div ng-repeat="hash in hashes | filter: filterArray">
демонстрационный скрипт обоих
Пользовательский фильтр
Для создания полностью настраиваемого фильтра это работает:
filter('inArray', function() {
return function inArray( haystack , needle ) {
var result = [];
var item,i;
for (i=0; i< haystack.length;i++) {
item = haystack[i];
if (needle.indexOf(item.type) !== -1)
result.push(item);
};
return (result);
};
});
Используется следующим образом:
<div ng-repeat="hash in hashes | inArray: types">
inArray
(& amp; agrave; la php's in_array). Добавил его в конец моего вопроса. – jacob 25 January 2014 в 02:04