我很好奇这是否是Array.filter()
方法的正确实现。
//Array of generic Object instances representing galleries.
//The images property is empty for the example
var galleries:Array = new Array();
galleries[0] = {name: 'Portraits', images: new Array()};
galleries[1] = {name: 'Landscapes', images: new Array()};
galleries[2] = {name: 'Still Lifes', images: new Array()};
//Returns a gallery Object by the specified name
function getGallery(galleryName:String):Object
{
function isGallery(element:*, index:int, arr:Array):Object
{
return (element.name == galleryName);
}
var arr:Array = galleries.filter(isGallery);
return arr[0];
}
var gallery:Object = getGallery('Landscapes');
if(gallery != null)
{
trace(gallery.name);
}
else
{
trace('Not found.');
}
这是我之前使用的功能:
function getGallery(galleryName:String):Object
{
for each(var gallery:Object in galleries)
{
if(galleryName == gallery.name)
{
return gallery;
}
}
return null;
}
我无法找出filter()
方法的回调函数的实现,其中回调在getGallery()
函数之外。我想知道是否有办法让isGallery
范围超出getGallery
范围?
答案 0 :(得分:3)
我很好奇,如果这是好的 Array.filter()的实现 方法
不仅你的代码是正确的,它还是一个很好的例子。用于Array.filter
。
我无法弄明白 回调的实现 filter()方法的函数, 回调在哪里之外 getGallery()函数。
它可以,但是那点好听 - 那些回调函数的想法主要用作匿名函数,例如:
//Returns a gallery Object by the specified name
function getGallery(galleryName:String):Object
{
return galleries.filter(function(gallery:*, idx:int, a:Array):Boolean {
return (gallery.name == galleryName);
}).shift();
}
请注意紧凑的代码。
我想知道是否有办法获得 isGallery功能之外 getGallery范围?
这是不可能直接的,但如果你在父类中使它成为一个静态函数是可能的,但为什么这样做呢?请参阅上面的代码示例,它本身非常紧凑且可重复使用。
作为旁注,我会将整个galleries
替换为:
var galleries:Object = {
'Portraits': [],
'Landscapes': [],
'Still Lifes': []
};
所以你的'getGallery'方法变成了O(1)操作:
galleries[name]