У вас уже есть максимальная зарплата, вам нужно сохранить индекс сотрудника с самой высокой зарплатой, как только вы его получите. Ваш код должен выглядеть следующим образом.
var projects = [
//Object(0)
{
projectName: "Winter",
projectCode: "O0123",
employee: [{
title: "Mr.",
name: "Tom",
id: 1005,
salary: 12345
},
{
title: "Mr.",
name: "Bunny",
id: 1009,
salary: 54321
},
{
title: "Mr.",
name: "Harris",
id: 1010,
salary: 23456
},
]
},
//Object(1)
{
projectName: "Summer",
projectCode: "P10406",
employee: [{
title: "Mr.",
name: "Seth",
id: 1006,
salary: 1234
},
{
title: "Mr.",
name: "Sam",
id: 1011,
salary: 654321
},
],
}
]
console.log(projects.length);
let maxSalary = 0;
let employeeWithMaxSalary = {};
for (var i = 0; i < projects.length; i++) {
console.log(projects[i].projectName);
for (var j = 0; j < projects[i].employee.length; j++) {
console.log("\t" + projects[i].employee[j].title + projects[i].employee[j].name + "\n" + "\t" + "Salary: " + projects[i].employee[j].salary);
if (i == 0 && j == 0) {
maxSalary <= projects[i].employee[j].salary;
}
if (projects[i].employee[j].salary > maxSalary) {
maxSalary = projects[i].employee[j].salary;
employeeWithMaxSalary = projects[i].employee[j];
}
}
}
console.log("Max Salary = " + maxSalary);
console.log(employeeWithMaxSalary);
Вы также можете улучшить свой код, используя синтаксис ES6 (функция стрелки и foreach
) вместо того, чтобы иметь вложенные циклы. [ 116]
После того как Вы делаете недействительным таймер, просто звоните release
на нем (принятие Вы сохранили ссылку, за которую Вы держитесь), и затем ноль Ваша ссылка. Тот путь при выходе из представления, пытаясь делать недействительным таймер во второй раз, просто назовет тот метод на ноле вместо этого, который ничего не делает.
С другой стороны, можно использовать -[NSTimer isValid]
чтобы проверить, допустимо ли это перед лишением законной силы, но нет действительно никакой причины содержать на Вашу ссылку после лишения законной силы его первый раз так или иначе. Кроме того, если Ваша настоящая проблема состоит в том, что Вы не сохранили свою ссылку и так первое -invalidate
на самом деле листы Вы со ссылкой, указывающей на выпущенный объект, затем звоня -isValid
не поможет так или иначе.
То, что я обычно делаю, является нолем членская переменная содержание таймера, или когда это стреляет, или когда я делаю недействительным его. Затем можно просто сделать:
[myNSTimer invalidate];
myNSTimer = nil;
и это сделает правильную вещь.