Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查数组中是否存在函数_Javascript_Arrays_Kineticjs - Fatal编程技术网

Javascript 检查数组中是否存在函数

Javascript 检查数组中是否存在函数,javascript,arrays,kineticjs,Javascript,Arrays,Kineticjs,我有一个kinecticjs图像对象,我正在根据一些参数对其应用过滤器,但是当它需要重新绘制时,它将再次应用过滤器,这意味着它将复制过滤器 我知道我应该做一些检查,但它将函数应用于数组 //create object var image = new Kinetic.Image({ image: alreadyLoadedImageObject }); function addFilter(shouldAdd){ if(shouldAdd){ var filter

我有一个kinecticjs图像对象,我正在根据一些参数对其应用过滤器,但是当它需要重新绘制时,它将再次应用过滤器,这意味着它将复制过滤器

我知道我应该做一些检查,但它将函数应用于数组

//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);
这应该大致显示了我当前正在做的事情,在本例中,一旦超时运行,将有2个
Kinetic.Filters.RGB
应用于图像对象

我认为这是一个一般的JavaScript问题,而不是仅仅是KyeTICJs,因为我需要知道,在过滤器数组中已经有了一个<代码>动态。过滤器。RGB < /Cuff>函数。< /P> 所以有两个问题,是否需要使用类似于

Array.indexOf
的方法检查数组中是否已经存在函数名?或者KineticJS中已经有某种我没有见过的预构建方法

x = function(){};
y = function(){};
a = [];
a.push(x);
a.indexOf(x); //0
a.indexOf(y); //-1
因此,您可以尝试:

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

还可以使用some()函数进行检查

if(!filters.some((val) => {val == Kinetic.Filters.RGB}))

没想到这会起作用,我看到的所有东西都说indexOf只是字符串。我最终使用了另一个适合我的项目的解决方案,但很高兴知道这一点,在这里用JSFIDLE对其进行了测试