lodash在javascript中排序对象数组

时间:2016-04-21 23:27:20

标签: javascript arrays json sorting lodash

我有一个来自服务器的对象数组响应,我试图按升序对uid进行排序,同时保持整个数组对data数组完整。 data数组中的含义有2个元素。我试图查看数组中所有元素中的一个数组中的uid,并确定元素应该如何放置在data数组中的顺序。

我使用lodash尝试了以下操作,但它似乎无法正常工作,但我觉得我已经接近并想要一些帮助:

// sort by:
console.log(res.results[0].data[0].row[1].uid)

_.forEach(res.results, function(obj) {
  _.forEach(data, function(anotherObj) {
    _.forEach(row, function(row) {
      data.row = _.sortBy(data.row, function(row) {
      return row[1].uid;
      });
    });
  });
});

以下是从服务器返回的对象数组:

var res = {
  results: [{
    columns: ['large', 'medium', 'small'],
    data: [{
      row: [{
        sid: 13,
        tid: 427
      },
        {
          uid: 69,
          vid: 450,
          wid: 65
        },
        null],
      multirow: {
        nodule: [{
          xid: '427',
          properties: {
            yid: 13,
            zid: 427
          }
        },
          {
            aid: '450',
            properties: {
              uid: 69,
              bid: 450,
              cid: 65
            }
          }]
      }
    },
      {
        row: [{
          sid: 13,
          tid: 427
        },
          {
            vid: 432,
            uid: 65,
            wid: 61
          },
          null],
        multirow: {
          nodule: [{
            xid: '427',
            properties: {
              yid: 13,
              zid: 427
            }
          },
            {
              aid: '432',
              properties: {
                bid: 432,
                uid: 65,
                cid: 61
              }
            }]
        }
      }]
  }],
  errors: []
};

1 个答案:

答案 0 :(得分:1)

您不需要那么多循环:

_.forEach(res.results, function(result) {
  result.data = _.sortBy(result.data, function(datum) {
    return datum.row[1].uid;
  });
});

您只需迭代结果,每个结果可能都有一个要排序的数据数组。然后sortBy回调接受该数组的每个元素,并且应该返回要比较的值。