从数组中获取一个函数javascript
Get a function from an array, javascript
得到一个带有函数的数组。我想做一个函数,用给定的函数名作为参数从数组中返回一个函数。
var arr = [
function Dog(){},
function Cat(){}
];
var getFunction = function(name){
return // should return the function with matching name
};
var dogFunction = getFunction('Dog'); // returns dog function.
https://jsfiddle.net/zcjd9pyz/
这可能吗?
如果你做一个关联数组,它可能是
var arr = {
'dog' : function Dog(){},
'cat' : function Cat(){}
};
arr['dog']();
函数具有name
属性:
var getFunction = function(name){
for (var i=0; i<arr.length; i++) {
if (arr[i].name===name) return arr[i];
}
return // return undefined
};
如果你想快速访问,你可以通过首先迭代来预计算地图:
var map = arr.reduce(function(m,f){ m[f.name]=f; return m}, {});
它允许
var fun = map["Dog"];
用代码计算地图,而不是自己键入,这样就不会重复名称。DRY代码更易于维护。
编辑:我不确定函数在IE上有名字,但我不能测试它。
在ES6中,您可以在不修改数组的情况下完成此操作(或者在除Internet Explorer之外的所有浏览器中,如果您将箭头函数替换为普通函数并使用polyfill查找:
var getFunction = function(name){
return arr.find( func => name === func.name );
};
即使在ES6中,我也看不出有什么好的理由这么做。我认为您应该按照Deblaton Jean-Philippe的回答,将数组更改为对象,将名称映射到函数。
您可以使用我的这个示例解决方案,而不是匹配字符串,您可以根据函数名使用它
https://gist.github.com/freewayz/56bd9db6d4164a42be75
var myArray = [{"name" : "pitaside", "id" : 1}, {"name":"github", "id" : 3}]
filterArrayByType: function (arrayToMatch, fieldType, matcher) {
if(! arrayToMatch instanceof Array){throw ("Not an Array")}
var filterTypeToReturn = arrayToMatch.filter((items) => {
var temp;
if (items[String(fieldType)] === matcher) {
temp = items[String(fieldType)]
}
return temp;
}
);
return filterTypeToReturn;
}
var myMatcher = 'github'
var id3 = filterArrayByType(myArray, 'name', myMatcher)[0].id
//returns 3
您可以使用Function.prototype.toString()
。与name
不同,它受到大多数现代浏览器以及Node.js.的支持
var arr = [
function Dog ( ) {},
function Cat ( ) {}
];
var getFunction = function(name){
'use strict';
// could use find but it isn't supported by IE
return arr.filter(function (func) {
return /^function's+('w+)/.exec(func.toString())[1] === name;
})[0];
};
console.log(getFunction('Dog'));
console.log(getFunction('Cat'));
console.log(getFunction('Unknown'));
相关文章:
- 我可以在json对象中添加一个函数吗
- 如何在JQuery函数中定义一个值,然后调用另一个函数并使用该值
- 是否可以将一个函数输入连接到另一个函数调用的文本
- 在另一个函数中使用变量this
- 在另一个函数成功结束后调用该函数
- mongoose.connect undefined不是一个函数
- 监听器必须是一个函数
- 使用JS函数来使用另一个函数的语法?node.js
- 如何取消object.prototypes javascript的一个函数
- 从Chrome扩展名中的popup.html文件在background.js文件中运行一个函数
- 嵌套到另一个函数中的Fancybox函数;不起作用
- 如何在javascript中使用不止一个函数
- jQuery-在页面加载时执行一个函数
- jquery UI draggable:UI.children不是一个函数
- jQuery Mobile Undefined不是一个函数
- 如何在php中创建一个函数,该函数与文本区域一起工作,通过输入类似[color:red]的内容来打印具有等效颜色的文本
- javascript函数将数据添加到屏幕,但随后被另一个函数覆盖
- JS异常:animate不是一个函数
- 如何将一个函数附加到一个不存在的元素上
- JavaScript/jQuery-添加添加和删除类与下一个函数之间的延迟