我有一个大数组对象。有没有办法过滤 roku 中的数据。 roku 中是否有任何直接方法可用,例如 JavaScript 方法 .filter 和 .map。
排序
BrightScript 包含基本排序功能,您可以在 ifArraySort 文档中阅读相关内容。如果您需要嵌套属性或多属性排序等高级排序,则需要自己实现。但 Roku 支持通过单个键对对象数组进行排序,如下所示:
a = [{id:3, name:"Betty"}, {id:1, name:"Carol"}, {id:2, name:"Anne"} ]
a.SortBy("name")
'a = [ {id:2, name:"Anne"}, {id:3, name:"Betty"}, {id:1, name:"Carol"} ]
地图
据我所知,brightscript 中没有
.map()
等效项,因此您需要使用 for 循环和新数组自行实现。像这样的东西:
movies = [
{ id: 3, name: "Children of the Corn" },
{ id: 1, name: "A Christmas Carol" },
{ id: 2, name: "Big Buck Bunny" }
]
newArray = []
for each item in movies
newArray.push(item.id + item.name)
end for
您可以通过编写自己的地图函数来简化此操作:
function map(items, callbackFunction)
newArray = []
for each item in items
newItem = callbackFunction(item)
newArray.push(newItem)
end for
return newArray
end function
function init()
movies = [
{ id: 3, name: "Children of the Corn" },
{ id: 1, name: "A Christmas Carol" },
{ id: 2, name: "Big Buck Bunny" }
]
movies = map(movies, function(x)
return x.id.ToStr() + x.name
end function)
end function
注意: BrightScript 中的函数调用比 JavaScript 中的函数调用要昂贵得多,因此我不会在性能敏感的情况下使用它。 此基准测试显示,简单的 .map() 调用比执行相同工作的内联循环慢 50% 以上:
LoopVsMap -- RESULTS:
__________________________________________________
loop: --- 74,681.00 ops/sec (fastest)
map: ---- 33,432.00 ops/sec (slowest)