Test, filter, reduce

by Walter Rumsby

JavaScript

(function () {
    'use strict';
    var test = function (obj, value) {
        return obj && 'cls' in obj && obj.cls === value;
    };

    var filterFn = function (obj) {
        return test(obj, 'x-actionbar');
    };

    var reduceFn = function (prev, next) {
        if (test(prev, 'x-actionbar')) {
            return prev;
        } else if (test(next, 'x-actionbar')) {
            return next;
        }
        return undefined;
    };

    var arr = [{
        cls: ''
    }, {
        cls: 'x-actionbar'
    }, {
        cls: 'foo'
    }, {
        cls: 'x-actionbar'
    }];

    console.assert(arr.filter(filterFn).length < 2, 'More than 1 match');

    console.log(arr.reduce(reduceFn));
}());