jsBee
jsBee

Reputation: 413

conditions in json in standard function using javaScript?

I have below function.

compare: function (filterObj, sourceObj, fullMatch) {
            if (!filterObj) {
                return true;
            }
            var filterKeys = Object.keys(filterObj);
            var match = fullMatch;
            for (var i = 0, len = filterKeys.length; i < len; i++) {
                var key = filterKeys[i];
                var value = filterObj[key];
                var isKeyInsourceObj = sourceObj.hasOwnProperty(key);
                var isEqual = value === "*" || value === sourceObj[key];
                var issourceObjPropArr = Array.isArray(sourceObj[key]);
                var isValueArr = value === "*" || Array.isArray(value);

                if (!fullMatch && isKeyInsourceObj) {
                    if (isEqual) {
                        return true;
                    }
                    if (issourceObjPropArr && sourceObj[key].indexOf(value) !== -1) {
                        return true;
                    }
                } else
                    if (fullMatch && isKeyInsourceObj) {
                        var inArr = issourceObjPropArr && (sourceObj[key].indexOf(value) !== -1 || (isValueArr && App.Utils.findOne(sourceObj[key], value)));
                        if (!isEqual && !inArr) {
                            match = false;
                        }
                    }
                    else {
                        match = false;
                    }
            }
            return match;
        },

This is general standard function ,which could be use for anything. I am trying to get solution when filterObj is category. Now in above code * meaning it covers all types of category (unknown, person, thing, contact, etc).

What I want in addition : I am trying to get category which is not unknown,null, undefined but person, thing,contact.

Note : filterObj has **category, OON, not tracked**,

 sourceObj is json which has information about element including filterObj.

This function should be define as general/standard function which could be use anywhere.

Upvotes: 1

Views: 38

Answers (1)

jsBee
jsBee

Reputation: 413

solution :

compare: function (filterObj, sourceObj, fullMatch) {
            if (!filterObj) {
                return true;
            }
            var filterKeys = Object.keys(filterObj);
            var match = fullMatch;
            for (var i = 0, len = filterKeys.length; i < len; i++) {
                var key = filterKeys[i];
                var value = filterObj[key];
                var isKeyInsourceObj = sourceObj.hasOwnProperty(key);
                var isNotUnknown;
                var isEmpty = App.Utils.isEmpty(sourceObj[key]);
                if (!isEmpty) {
                    isNotUnknown = value === "!null";
                }
                var isEqual = value === "*" || value === sourceObj[key] || isNotUnknown;
                var issourceObjPropArr = Array.isArray(sourceObj[key]);
                var isValueArr = value === "*" || Array.isArray(value);

                if (!fullMatch && isKeyInsourceObj) {
                    if (isEqual && isNotUnknown) {
                        return true;
                    }
                    if (issourceObjPropArr && sourceObj[key].indexOf(value) !== -1) {
                        return true;
                    }
                }
                else if (fullMatch && isKeyInsourceObj) {
                        var inArr = issourceObjPropArr && (sourceObj[key].indexOf(value) !== -1 || (isValueArr && App.Utils.findOne(sourceObj[key], value)));
                     if (!isEqual && !inArr && !isNotUnknown) {
                            match = false;
                     }
                }
                else {
                     match = false;
                }
            }
            return match;
        },
    //check value is not undefined or null or 'unknown'
    isEmpty: function (val) {
        return (val === undefined || val == null || val === "unknown") ? true : false;
    },

Upvotes: 1

Related Questions