2016-11-18 2 views
0

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

Что я имею в виду на самом деле очень простой вопрос:

Скажет у меня есть School класса, содержащего массив Student с, который имеет множество Notebook с, и я хочу передать все Notebook с в моих School

public class School{ 
    students: Student[]; 
} 

public class Student{ 
    notebooks: Notebook[] 
} 

Как следует обращаться ко всем ноутбукам в моей школе?

Ищет более эффективный способ от сохранения всех Notebook с в отдельном массиве достигается с помощью for цикла ..

Заранее спасибо :)

+0

Что вы планируете делать с «ноутбуками»? Есть много функций массива, которые вы могли бы использовать 'filter',' some', 'every',' forEach', 'reduce',' map'? –

+0

@ adam-beck Спасибо за быстрый ответ. Я бы хотел отобразить их вместе и сделать некоторые CRUD на них –

+0

Разве вы не смутили Javascript с Java? Javascript не использует ключевое слово 'public', по крайней мере, сейчас. Это [зарезервировано] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Future_reserved_keywords), но пока не используется. – hindmost

ответ

1

Все зависит от того, что вы хотите делать с выходом или с каждым отдельным ноутбуком? Эта функция точно повторяет петли for без всех шаблонов.

school.students.forEach(function(student) { 
    student.notebooks.forEach(function(notebook) { 
    doSomethingWithNotebook(notebook); 
    }); 
}); 

// this returns all notebooks for all students and puts it into a single (flat) array 
var allNotebooks = school.students.reduce(function(collection, student) { 
    return collection.concat(sudent.notebooks); 
}, []); 

// now you can do things like filter out only New notebooks 
var newNotebooks = allNotebooks.filter(notebook => notebook.isNew); 
+0

Быстрое объяснение или ссылка для 'reduce' было бы хорошо –

+0

Метод reduce() применяет функцию к аккумулятору и каждому значению массива (слева -to-right), чтобы уменьшить его до одного значения. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce Это довольно сложная (но ** мощная **) функция JS. Существует целый курс от Egghead.io https://egghead.io/lessons/javascript-introducing-reduce-transforming-arrays-functionally –

+0

О, это очень классный, поэтому первым параметром ('collection') является возвращенный значение из последней итерации. Хорошо спасибо, я думаю, что это сделаю :) –

0

Концептуально, мой рефлекс будет искать что-то вроде п-мерного массива/матрицы, думаю

myMatrix[ [school][student][notebook[]] ] 

(но допустимый синтаксис), , а затем выяснить, как вытащить myMatrix [[ничего] [ничего] [Notbooks []]].

Это приведет к тому, что вы избежите цикла for, но все, что позволит вам выбрать все 3-инные элементы, я уверен, что это будет так же сложно, как и те элементы, которые хранятся вложенными или нет.

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

+0

На самом деле это то, о чем нужно подумать, потому что мне нужно, чтобы они были сгруппированы и все же связаны с их «учениками», но я не уверен, что это дает мне лучший доступ, чем просто сохранить базовую иерархию, –

Смежные вопросы