如何在对象数组中打乱数组?

How to shuffle arrays in array of objects?

我有一组与此类似的对象:

[
  {
    name: 'Apple',
    colors: ['red', 'green', 'yellow']
  },
  {
    name: 'Orange',
    colors: ['orange']
  }
]

我想打乱每个对象的颜色。我目前正在使用以下代码:

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

但是,此代码不适用于链接,将 colors 变成一个对象,并且需要一个我认为可以消除的匿名函数。有没有办法让这段代码更简单?

下面是使用 jinqJs 随机随机排列颜色 属性 数组的方法。

var data = [
  {
    name: 'Apple',
    colors: ['red', 'green', 'yellow']
  },
  {
    name: 'Orange',
    colors: ['orange']
  }
];


var result = jinqJs().from(data).select(function(row){
  row.colors = row.colors.sort(function() {return .5 - Math.random();});
  return row;
  });

document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 2) + '</pre><br><br>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>

这就是使用 lodash 以可链接的方式实现它的方式:

var r = _(a)
    .map(function(i) {
        return _.assign(i, { colors: _.shuffle(i.colors) });
    })
    .value();

JSFiddle:http://jsfiddle.net/bo8xf2as/