Meteor:Shuffle数组然后映射索引

时间:2014-11-03 20:03:56

标签: javascript arrays sorting meteor

我试图在将索引映射到mongo集合( items )之前对其进行随机化。

我现在拥有它的方式并不包括shuffling,只将索引映射到模板助手中的每个对象。像这样:

dayItems: function() {
    return this.dayItems.map(function(item, index) {
        item.index = index;
        return item;
    });
},

我已经尝试了在没有映射索引的情况下改组项目(这是有效的)。像这样:
编辑:对不起,这似乎并不依旧。有什么想法吗?

dayItems: function() {
    return _.shuffle(this.dayItems);
},

我想在添加索引之前使用underscore.js shuffle函数对项进行随机播放。 不知怎的,虽然这两个函数似乎并不相互喜欢,因为当我把它们组合起来时它们不会返回任何东西。

这就是我的尝试:

return _.shuffle(this.dayItems).map(function(item, index) {
    item.index = index;
    return item;
});

由于


编辑2 :这里有一些额外的代码。使用以下代码在路由器中获取项目:

dayItems: Items.find({
    gender: "male",
    dayOrNight: "day",
    isOutfit: true,
    isPrecipitation: true,
    tempId: "f",
    published: true,
}, {sort: {submitted: -1}, limit:6}),

有趣的是,当我在之后移动我分配索引时,它按预期工作:

return _.shuffle(this.dayItems.map(function(item, index) {
    item.index = index;
    return item;
}));

2 个答案:

答案 0 :(得分:0)

试试这个

return _.chain(this.dayItems).shuffle().map(function(item, index) {
    item.index = index;
    return item;
}).value();

答案 1 :(得分:0)

好的 a.dorosty 的回答是正确的。问题来自 this.dayItems ,它返回了一个mongo游标,而不是一个数组。

这有效:

return _.chain(this.dayItems.fetch()).shuffle().map(function(item, index) {
    item.index = index;
    return item;
}).value();