Search code examples
javascriptarrayskineticjs

Check if function exists in array


I have a kinecticjs image object I am applying filters to based on some parameters, however when it needs to be redrawn it will apply the filter again, meaning it will duplicate the filter.

I know i should be doing some sort of check but its applies a function right to an array.

//create object
var image = new Kinetic.Image({
    image: alreadyLoadedImageObject
});

function addFilter(shouldAdd){
    if(shouldAdd){
        var filters = image.filters() || [];

        filters.push(Kinetic.Filters.RGB);

        image.filters(filters);
    }
}

layer.add(image);
stage.add(layer);

addFilter(true);
stage.draw();

setTimeout(function(){
    addFilter(true);
    stage.draw();
},500);

That should roughly show what i am currently doing, in this case once the time out runs there will be 2 Kinetic.Filters.RGB applied to the image object.

I consider this a general javascript question rather then just kineticjs, as the root is that I need to somehow know that there already is a Kinetic.Filters.RGB function within the filters array.

So 2 questions, is there anyway to check with something like Array.indexOf that a function name already exists in the array? or is there already some sort of prebuilt method in KineticJS for this I have not seen?


Solution

  • x = function(){};
    y = function(){};
    a = [];
    a.push(x);
    a.indexOf(x); //0
    a.indexOf(y); //-1
    

    So you can try:

    if(filters.indexOf(Kinetic.Filters.RGB) !== -1)