基于未知字段值对数组进行排序

时间:2017-01-30 15:36:47

标签: javascript arrays node.js sorting

我有一个看起来像这样的数组:

  [ { average_cpu: 0.5,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 0,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 0,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 20,
    node_url: 'http://22.22.22/nodes',
    __v: 0 } ]

所以有4个不同的对象,有3个不同的值。我想要实现的是基于node_url对这个数组进行拆分/分组 - 所以理想的最终效果是我将有两个不同的数组,如下所示:

    var array1 = [ { average_cpu: 0.5,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 0,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 0,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 } ]

    var array2 = [ { average_cpu: 20,
    node_url: 'http://22.22.22/nodes',
    __v: 0 } ]

但是,我事先并不知道node_url,因此我并不是100%确定如何做到这一点。我已尝试使用_.groupBy,但由于我不知道node_url

的确切值,因此无法获得结果

还有另一种方法可以达到这个目的吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

使用_.groupBy你可以这样做:

var source= [ { average_cpu: 0.5,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 0,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 0,
    node_url: 'http://111.11.1111/nodes',
    __v: 0 },
  { average_cpu: 20,
    node_url: 'http://22.22.22/nodes',
    __v: 0 } ]

var grouped=_.groupBy(source, function (e) {
  return e.node_url;
  });

//for (let group in grouped) {
//  console.log('*********Elements in group ' + group+': *******')
//  console.log(grouped[group]);
//}

//For nodejs
Object.keys(grouped).forEach(function(key) {
  var group = grouped[key];
  console.log('*********Elements in group ' + key+': *******')
  console.log(group);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>