如何高效地获取包含多个嵌套集合的集合
标题可能不是最好的,改进将不胜感激!如何高效地获取包含多个嵌套集合的集合
我的意思其实很简单的问题:
说我有一个包含Student
s表示有Notebook
秒的数组的数组School
类,我想引用我School
所有Notebook
小号
public class School{
students: Student[];
}
public class Student{
notebooks: Notebook[]
}
我应该如何参考我所在学校的所有笔记本?
寻找从保存所有Notebook
跟一for
循环实现一个单独的数组更有效的方式..
感谢提前:)
这一切都取决于你想要什么对输出或每个笔记本做什么?该功能紧密复制到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);
'reduce'的快速解释或链接将会很好 –
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 –
哦,这是一个非常酷的,所以第一个参数('集合')是返回来自上次迭代的值。好吧,谢谢,我认为这样做:) –
从概念上讲,我的反射会寻找类似的n维数组/矩阵,认为
myMatrix[ [school][student][notebook[]] ]
(但有效的语法), 然后弄清楚如何拉myMatrix的[任何] [任何] [Notbooks []]]。
这最终会避免for循环,但任何能够让你选择所有3n元素的东西,我很确定会和那些嵌套或不嵌套的元素一样复杂。
本身并不是一个明确的答案,但没有关于你需要什么的更多细节,我能做的最好的是提供思路。
其实这是需要考虑的问题,因为我确实需要将它们分组并且与他们的“学生”相关,但我不确定它是否能让我更好地访问,而不仅仅是保持基本层次结构,因为它是 –
你打算用'notebooks'做什么?有很多数组函数可以使用'filter','some','every','forEach','reduce','map'? –
@ adam-beck感谢您的快速回复。我想一起显示它们,并在它们上面执行一些CRUD –
难道你不把Javascript与Java混淆吗?至少现在,Javascript没有使用“public”关键字。它是[保留](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Lexical_grammar#Future_reserved_keywords),但尚未实际使用。 – hindmost