从嵌套数组中获取最小值

时间:2014-06-20 12:29:08

标签: javascript jquery arrays underscore.js

我有一个这样的数组:

[
  {'date' : 'date', notifications:[{notificationID:4, name: 'abc' }, {notificationID:1, name: 'abc' }]},
  {'date' : 'date', notifications:[{notificationID:3, name: 'abc' }, {notificationID:4, name: 'abc' }]}
]

在这种情况下,notificationID的最小值为1.因此下划线应返回1.

这是我的不完整代码,显然不能像单个数组一样工作

notificationID = _.min(_.pluck($scope.notificationDetails, "notificationID"));

感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

你需要一个双重选择:第一个获得所有notifications,第二个获得第一个notificationID

var arr = [
  {'date' : 'date', notifications:[{notificationID:4, name: 'abc' }, {notificationID:1, name: 'abc' }]},
  {'date' : 'date', notifications:[{notificationID:3, name: 'abc' }, {notificationID:4, name: 'abc' }]}
];

var notificationID = _.min( _.pluck( _.flatten( _.pluck(arr, 'notifications') ), 'notificationID') );
console.log( notificationID );

答案 1 :(得分:0)

我不太了解下划线,但是这样的事情应该可以解决问题:

var arr = [
  {'date' : 'date', notifications:[{notificationID:4, name: 'abc' }, {notificationID:1, name: 'abc' }]},
  {'date' : 'date', notifications:[{notificationID:3, name: 'abc' }, {notificationID:4, name: 'abc' }]}
];

var min = arr.reduce(function (a, b) {
  return Math.min(a, b.notifications.reduce(function (a, b) {
    return Math.min(a, b.notificationID);
  }, Infinity));
}, Infinity);

希望这有帮助!