使用lodash而不是angular.forEach用于数组数组

时间:2016-07-27 06:41:56

标签: angularjs lodash

这是我的示例数组

var studentId= 2;
var students = [
[{id:1,C:40,PHP:50},{id:2,C:60,PHP:70},{id:3,C:80,PHP:90}]
[....]
[...]
]

目前我正在将studentId与学生匹配为

_.forEach(students,  function(student){
_.forEach(student, function(st){
if(st.id === studentId){
//do something
}
});

})

如何使用简单的lodash命令实现它。目标是避免两个forloops。

提前致谢。

3 个答案:

答案 0 :(得分:0)

如果您只是需要找到具有特定ID的用户,则可能需要将所有学生重新映射到以其ID为关键字的哈希

这可以这样做

students = stundents.reduce( result, studentRow => {
  studentRow.forEach(student => result[student.id] = student);
  return result;
}, {});

现在,学生是{' studentid':' student obj'}的对象。 通过简单的检查查找学生是否存在

var studentId= 2;
if(students[studentId]){
  //student exists
}

或者您可以深度展平数组,然后在结果

上运行Array#filter
var students = _.flattenDeep(students);
var studentFound = students.filter( student => student.id == studentID).length;
if(studentFound){
  //student found, do something
}

答案 1 :(得分:0)

试试这个

if (!_.isNil(_.find(students, { 'id': studentId }))) {
  // do something
}

答案 2 :(得分:0)

还有另一种方式:

var s = _.chain(students)
        .flatten()
        .find({'id': studentId})
        .value();