roku 中是否有任何直接方法可用,例如 JavaScript 方法 .filter 和 .map

问题描述 投票:0回答:1

我有一个大数组对象。有没有办法过滤 roku 中的数据。 roku 中是否有任何直接方法可用,例如 JavaScript 方法 .filter 和 .map。

roku brightscript
1个回答
0
投票

排序

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)
© www.soinside.com 2019 - 2024. All rights reserved.