[arrays] AngularJS وظيفة مرشح مخصص


Answers

في ما يلي مثال لكيفية استخدام filter داخل جافا سكريبت AngularJS (بدلاً من استخدام عنصر HTML).

في هذا المثال ، لدينا مجموعة من السجلات القطرية ، تحتوي كل منها على اسم ورمز ISO مكون من 3 أحرف.

نريد أن نكتب دالة تبحث من خلال هذه القائمة عن سجل يتطابق مع رمز 3 أحرف محدد.

إليك كيف سنقوم بذلك دون استخدام filter :

$scope.FindCountryByCode = function (CountryCode) {
    //  Search through an array of Country records for one containing a particular 3-character country-code.
    //  Returns either a record, or NULL, if the country couldn't be found.
    for (var i = 0; i < $scope.CountryList.length; i++) {
        if ($scope.CountryList[i].IsoAlpha3 == CountryCode) {
            return $scope.CountryList[i];
        };
    };
    return null;
};

نعم ، لا بأس بذلك.

ولكن إليك كيفية ظهور الوظيفة نفسها ، باستخدام filter :

$scope.FindCountryByCode = function (CountryCode) {
    //  Search through an array of Country records for one containing a particular 3-character country-code.
    //  Returns either a record, or NULL, if the country couldn't be found.

    var matches = $scope.CountryList.filter(function (el) { return el.IsoAlpha3 == CountryCode; })

    //  If 'filter' didn't find any matching records, its result will be an array of 0 records.
    if (matches.length == 0)
        return null;

    //  Otherwise, it should've found just one matching record
    return matches[0];
};

أكثر إتقانا.

تذكر أن filter يعرض مصفوفة كنتيجة (قائمة بسجلات مطابقة) ، لذلك في هذا المثال ، سنقوم إما بإرجاع سجل واحد ، أو NULL.

أتمنى أن يساعدك هذا.

Question

داخل جهاز التحكم الخاص بي ، أود تصفية مجموعة من الكائنات. كل من هذه الكائنات عبارة عن خريطة يمكن أن تحتوي على سلاسل بالإضافة إلى قوائم

حاولت استخدام $filter('filter')(array, function) تنسيق $filter('filter')(array, function) لكنني لا أعرف كيفية الوصول إلى العناصر الفردية للمصفوفة داخل وظيفتي. إليك مقتطف لإظهار ما أريد.

$filter('filter')(array, function() {
  return criteriaMatch(item, criteria);
});

ثم في criteriaMatch() ، سوف أتحقق مما إذا كان كل من الخاصية الفردية مطابقًا

var criteriaMatch = function(item, criteria) {
  // go thro each individual property in the item and criteria
  // and check if they are equal
}

لا بد لي من القيام بكل ذلك في وحدة تحكم وتجميع قائمة من القوائم وتعيينها في النطاق. لذلك أحتاج إلى الوصول إلى $filter('filter') بهذه الطريقة فقط. كل الأمثلة التي وجدتها في الشبكة حتى الآن تحتوي على معايير ثابتة تبحث داخل الوظيفة ، ولا تقوم بتمرير كائن معيار واختبار ضد كل عنصر في الصفيف.




Links