2016-11-18 68 views
0

标题可能不是最好的,改进将不胜感激!如何高效地获取包含多个嵌套集合的集合

我的意思其实很简单的问题:

说我有一个包含Student s表示有Notebook秒的数组的数组School类,我想引用我School所有Notebook小号

public class School{ 
    students: Student[]; 
} 

public class Student{ 
    notebooks: Notebook[] 
} 

我应该如何参考我所在学校的所有笔记本?

寻找从保存所有Notebook跟一for循环实现一个单独的数组更有效的方式..

感谢提前:)

+0

你打算用'notebooks'做什么?有很多数组函数可以使用'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()方法对累加器和数组的每个值应用一个函数(从左向右)将其降至单个值。 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

哦,这是一个非常酷的,所以第一个参数('集合')是返回来自上次迭代的值。好吧,谢谢,我认为这样做:) –

0

从概念上讲,我的反射会寻找类似的n维数组/矩阵,认为

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

(但有效的语法), 然后弄清楚如何拉myMatrix的[任何] [任何] [Notbooks []]]。

这最终会避免for循环,但任何能够让你选择所有3n元素的东西,我很确定会和那些嵌套或不嵌套的元素一样复杂。

本身并不是一个明确的答案,但没有关于你需要什么的更多细节,我能做的最好的是提供思路。

+0

其实这是需要考虑的问题,因为我确实需要将它们分组并且与他们的“学生”相关,但我不确定它是否能让我更好地访问,而不仅仅是保持基本层次结构,因为它是 –