我有以下代码,它根据JSON数据的2个不同部分创建变量。
function showDescription(implant) {
return implant.description + '<br />';
}
function showSectionHeadings(implant) {
return implant.sectionHeading + '<br />';
}
function loadImplantsOfFamily(implantFamily) {
var implantData = JSON.parse(getLocal("implantData"));
var allImplantsInFamily = implantData.implants.filter(familyToLoad,implantFamily);
var implantDescription = allImplantsInFamily.map(showDescription);
var sectionHeading = allImplantsInFamily.map(showSectionHeadings);
var uniqueVals = sectionHeading.unique();
$("#holderForImplants").html(uniqueVals);
}
一切正常,但我拥有的两个函数是相同的,除了它们引用的JSON键。如何将这两个函数合并为一个,从map函数传入JSON变量?
这样的事情不起作用:
function showKey(implant,key) {
return implant.key + '<br />';
}
function loadImplantsOfFamily(implantFamily) {
var implantData = JSON.parse(getLocal("implantData"));
var allImplantsInFamily = implantData.implants.filter(familyToLoad,implantFamily);
var implantDescription = allImplantsInFamily.map(showKey("description"));
var sectionHeading = allImplantsInFamily.map(showKey("sectionHeading"));
var uniqueVals = sectionHeading.unique();
$("#holderForImplants").html(uniqueVals);
}
答案 0 :(得分:2)
简单易用,如下所示:
function showKey(implant,key) {
return function(elem, index, arr){ //Catch 'elem', 'index', 'arr' - Element passed by Map function. Checkout the documentation for more on this.
return implant[key] + '<br />';
}
}
简单示例:
var a = {one:1, two:2}
var b = {three:3, four: 4};
var dynamic = function(obj, key){
return function(el){ //Closure call to save the key. 'el' will be element injected from Map function
console.log(obj[key])
return obj[key];
}
}
var test = [1, 2, 3];
test.map(dynamic(b, "four"));
test.map(dynamic(a, "one"));
https://jsfiddle.net/mdLda62f/
闭包功能可帮助您将动态键保存在函数引用中,以便在运行时提取所需的值。这就是javascript闭包概念的美妙。
Array.Map上有关地图功能及其参数的更多说明的文档
答案 1 :(得分:1)
您可以对对象属性使用括号表示法,以便可以使用变量。你的功能看起来像这样:
function showDescription(implant, key) {
return implant[key] + '<br />';
}
然后称之为:
showDescription(implant, 'description');
showDescription(implant, 'sectionHeading');
答案 2 :(得分:0)
如果您希望结合此功能,可以按照以下方式使用闭包和实现功能。
function showKey(prop){
return function(obj){
return obj[prop];
};
}
在稍后阶段,只需调用您在代码中描述的showKey
函数。内部函数将由map
调用,通过传递数组元素,闭包将确保访问相应的属性名称。