【问题标题】:Meteor: iterate over multiple arrays simultaneously?Meteor:同时迭代多个数组?
【发布时间】:2014-03-19 07:52:04
【问题描述】:

我想我知道这个问题的答案是什么,但也许有人有比我想的更好的解决方案。

如果我想将 2 个数组传递给模板,假设:

arrName = ['one','two','three'];

arrPic = ['one.jpg','two.jpg','three.jpg'];

我想使用#each 助手循环遍历数组并将相应的名称放在每张图片下。有没有办法做到这一点?或者我是否需要创建一个临时 JSON 数组来完成这项工作,例如:

arrCombined = [ { name: 'one', pic: 'one.jpg'}, {name: 'two', pic: 'two.jpg'} etc...

希望这是足够的信息。如果不清楚,请告诉我。

【问题讨论】:

    标签: arrays meteor


    【解决方案1】:

    核心内的 Meteor 捆绑包下划线,因此您可以使用 _.zip_.object 助手之一:

    zip_.zip(*arrays)

    将每个数组的值与相应位置的值合并在一起。当您有通过匹配数组索引进行协调的单独数据源时很有用。如果您使用的是嵌套数组矩阵,_.zip.apply 可以以类似的方式转置矩阵。

    _.zip(['moe', 'larry', 'curly'], [30, 40, 50], [true, false, false]);

    => [["moe", 30, true], ["larry", 40, false], ["curly", 50, false]]

    _.zip.apply(_, arrayOfRowsOfData);

    => arrayOfColumnsOfData

    object_.object(list, [values])

    将数组转换为对象。传递 [key, value] 对的单个列表,或键列表和值列表。如果存在重复键,则最后一个值获胜。

    _.object(['moe', 'larry', 'curly'], [30, 40, 50]);

    => {moe: 30, larry: 40, curly: 50}

    _.object([['moe', 30], ['larry', 40], ['curly', 50]]);

    => {moe: 30, larry: 40, curly: 50}

    查看underscore documentation 以获取您可能使用的这些和其他帮助器,以便能够以您想要的确切格式构建组合数组。

    【讨论】:

    • 这非常有帮助。我知道 Meteor 包含下划线,但我不熟悉它,也不知道它有什么用途。我现在可以看到很多用途!谢谢。
    • 绝对!下划线是一个很棒的实用工具带。
    • 如果这两条数据通常一起使用,它们将是根据您的arrCombined 重构数据库设计的良好候选者。取决于您需要多久独立访问一次数据。
    • 当然。然而,在这种情况下,其中一个数组(jpg 数组)是常量(始终使用),另一个将是几个不同数组之一,具体取决于用户的语言选择。
    【解决方案2】:

    使用临时 JSON。

    没有捷径。在迭代另一个数组时访问一个数组的项需要知道模板中的当前 idx,这在 Meteor 的最新版本中尚不可能。

    【讨论】:

    • 这是我的问题的答案。希望 Meteor 有一天会提供对索引的访问。在此之前,请参阅上面 Serkan 的 underscore.js 示例,轻松创建临时 JSON 数组。
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2015-08-23
    • 2015-05-26
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2016-05-16
    • 2021-04-11
    相关资源
    最近更新 更多