Javascript 如何在对象数组中洗牌数组?

Javascript 如何在对象数组中洗牌数组?,javascript,lodash,Javascript,Lodash,我有一个类似如下的对象数组: [ { name: 'Apple', colors: ['red', 'green', 'yellow'] }, { name: 'Orange', colors: ['orange'] } ] 我想洗牌每个对象的颜色。我目前正在使用以下代码: _.each(fruits, function (elem) { elem.colors = _.shuffle(elem.colors); }); 但是,这段代码不适

我有一个类似如下的对象数组:

[
  {
    name: 'Apple',
    colors: ['red', 'green', 'yellow']
  },
  {
    name: 'Orange',
    colors: ['orange']
  }
]
我想洗牌每个对象的颜色。我目前正在使用以下代码:

_.each(fruits, function (elem) {
  elem.colors = _.shuffle(elem.colors);
});

但是,这段代码不适用于链接,将颜色转换为对象,并且需要一个匿名函数,我认为可以消除该函数。有什么方法可以使这段代码更简单吗?

下面是如何简单地使用随机洗牌颜色属性数组

风险值数据=[ { 名称:'苹果', 颜色:[“红色”、“绿色”、“黄色”] }, { 名称:“橙色”, 颜色:[“橙色”] } ]; var result=jinqJs.fromdata.selectfunctionrow{ row.colors=row.colors.sort函数{return.5-Math.random;}; 返回行; }; document.body.innerHTML+=;
这就是如何使用lodash以可链接的方式实现它:


jsIDLE:

将颜色转换为对象这意味着什么?颜色是['red','green','yellow'],但在随机分组后可能是{0:'red',2:'yellow',1:'green'}这是不可能的。此代码无法执行此操作。您可以始终使用助手函数为您洗牌。。我们可以从这里得到一些想法@JohnRuddell为什么。shuffle使用的算法与您链接的帖子中描述的相同。问题中OP提供的算法如何更好?您的代码长度至少是原来的两倍,并且需要包含另一个库。这比我的原始示例复杂得多,没有集成的洗牌,并且保留了匿名函数。我明白了,您要重新洗牌颜色属性上的项,我从颜色属性返回了随机颜色。不保留异常函数,它将随.select一起消失。是的,我的代码长了一行,但我用jinqJs代替下划线。实际上你不洗牌颜色。这种洗牌算法不公平。例如,它以“黄色”结尾的可能性是以“红色”结尾的可能性的两倍。我用你的小提琴把它显示在输出窗口中,相反,在地图中改变值通常不是一个好主意,因为它引入了副作用。如果更新值是目标,那么最好使用每个值而不是映射,因为不需要映射数组。如果你真的想映射到一个新的数组,我会做一些类似于返回u.defaults{colors:u.shufflei.colors},I;避免链接原始对象。
var r = _(a)
    .map(function(i) {
        return _.assign(i, { colors: _.shuffle(i.colors) });
    })
    .value();