[Arrays] أنغلارجس وظيفة مرشح مخصص


Answers

في ما يلي مثال لكيفية استخدام filter ضمن جافا سكريبت أنغولارجس (وليس في عنصر هتمل).

في هذا المثال، لدينا مجموعة من سجلات البلدان، تحتوي كل منها على اسم ورمز إسو مكون من 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 يعرض مصفوفة نتيجة (قائمة السجلات المطابقة)، لذا في هذا المثال، سنريد إما إرجاع سجل واحد أو نول.

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

Question

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

حاولت استخدام $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') بهذه الطريقة فقط. كل الأمثلة وجدت في الشبكة حتى الآن لديها معايير ثابتة البحث داخل الدالة، أنها لا تمرير كائن المعايير واختبار ضد كل بند في الصفيف.