我的数据集:
import matplotlib.pyplot as plt
import scipy.optimize as so
def function(C, m):
result = []
for i,j in zip(Re, Pr):
y = C * i ** m * j ** (1/3)
result.append(y)
return result
parameters, covariance = so.curve_fit(function, Re, Nu)
y2 = function(Re, Pr, *parameters)
print(parameters)
plt.plot(Re, Nu)
plt.plot(Re, y2)
plt.show()
问题:
我有一些包含学生对象的课程对象。每门课程可能包含不同数量的学生。
我需要搜索每门课程和每位学生,以查看分配的属性是否设置为true。
理想情况下,我想调用一个执行此搜索并仅返回true或false的函数。搜索时,一旦发现分配的属性设置为true,搜索就会退出并返回true。如果每个课程的每个学生的所有分配属性都设置为false,则返回false。
我希望这个问题有意义,我希望数据集有意义/正确格式化(我正在处理所有对象-没有数组)。所有课程对象都在一个对象中。
在此先感谢您的帮助!
答案 0 :(得分:1)
您将很难按照所写的那样搜索该数据。真正的问题是您对数据结构的选择。在两个地方,当您应该使用数组时,您正在使用一个对象。
这里是相同的数据,但是将courses
编码为数组,可以使用rich set of array methods遍历。我对每门课程的学生人数进行了相同的更改。
let courses = [
{
id: 'courseID003',
students: [
{
id: 'studentID34',
assigned: false,
dueDate: null
},
{
id: 'studentID34',
assigned: false,
dueDate: null
}
]
},
{
id: 'courseID007',
students: [
{
id: 'studentID89',
assigned: true,
dueDate: "2018-12-07 15:51"
},
{
id: 'studentID111',
assigned: true,
dueDate: "2018-12-07 15:51"
},
{
id: 'studentID115',
assigned: false,
dueDate: null
}
]
}
];
let unassignedStudents = Array.prototype.concat.apply(
[],
courses.map(c => c.students.filter(s => !s.assigned)));
console.log('unassignedStudents:',unassignedStudents);
有了改进的数据结构,您可以找到所有“未分配”的学生,如下所示:
let unassignedStudents = Array.prototype.concat.apply(
[],
courses.map(c => c.students.filter(s => !s.assigned)));
希望您能看到这种结构上的变化如何为您打开新的大门。
祝你好运。
答案 1 :(得分:1)
您在这里!
const data = {
courseID003: {
studentID34: {
assigned: false,
dueDate: null
},
studentID34: {
assigned: false,
dueDate: null
}
},
courseID007: {
studentID89: {
assigned: true,
dueDate: "2018-12-07 15:51"
},
studentID111: {
assigned: true,
dueDate: "2018-12-07 15:51"
},
studentID115: {
assigned: false,
dueDate: null
}
}
}
const search = (data) => {
return Object.keys(data).some(courseKey => {
return Object.keys(data[courseKey]).some(studentKey => {
return data[courseKey][studentKey]['assigned']
})
})
}
console.log(search(data))
参考:some,Object.keys
答案 2 :(得分:1)
这应该可以解决问题,请记住,Object.values可能需要一个polyfill(对于IE)以及flatMap(在许多浏览器中都缺少atm)。
const courses = Object.values(data);
const students = courses.flatMap(course => Object.values(course);
const result = students.some(student => student.assigned);