2016-07-27 2 views
1

Вот мой пример массиваиспользование lodash вместо angular.forEach для массива массивов

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.

Заранее спасибо.

+0

у вас есть массив массивов объектов. вы не можете пропустить второй цикл. если вам просто нужно найти пользователя с определенным идентификатором, возможно, вам нужно переназначить всех студентов на хэш с их идентификатором в качестве ключа – eltonkamami

+0

@eltonkamami, вы можете, сперва его сначала – uzilan

+0

@uzilan, вы правы. lodash конкретный код, как ОП спросил. я думаю, что производительность будет ужасной, если это будет сделано слишком часто. – eltonkamami

ответ

0

если вам просто нужно найти пользователь с определенным идентификатором, может быть, вы должны переназначить все студент в хэш с их идентификатором в качестве ключа

это может быть сделано, как так

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

сейчас студенты является объектом { «studentid»: «студента 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 
} 
+0

Спасибо. Я пошел с уменьшенным вариантом. –

0

Попробуйте

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

Почему этот ответ начинается с «Или»? –

0

А вот еще один способ:

var s = _.chain(students) 
     .flatten() 
     .find({'id': studentId}) 
     .value(); 
Смежные вопросы