Как фильтровать по массиву [duplicate]

Другое событие 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));
}

5
задан jacob 25 January 2014 в 03:11
поделиться

1 ответ

Чтобы фильтровать один тип, вы можете:

<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">

demo пользовательского фильтра

17
ответ дан KayakDave 18 August 2018 в 01:25
поделиться
  • 1
    хорошо, спасибо. позор угловато не поддерживает его. – jacob 24 January 2014 в 07:09
  • 2
    Я закончил тем, что сделал его надлежащим фильтром, названным inArray (& amp; agrave; la php's in_array). Добавил его в конец моего вопроса. – jacob 25 January 2014 в 02:04
  • 3
    @jacob вы уверены, что фильтр работает правильно для вас? Обычно пользовательский фильтр хочет получить массив всех возвращаемых значений (в отличие от фильтра предикатов, который выполняется для каждой записи), но, похоже, вы возвращаете логическое значение. – KayakDave 25 January 2014 в 02:39
  • 4
    Ах, это объясняет, почему needle - это весь массив, который был передан в ngRepeat вместо указанного мной свойства. SO: 21344961 – jacob 25 January 2014 в 02:45
  • 5
    Да, я обновил специальный фильтр, который вы можете использовать. – KayakDave 25 January 2014 в 02:47
Другие вопросы по тегам:

Похожие вопросы: