Skip to content
Open

Zebra #1924

Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 57 additions & 1 deletion src/scripts/main.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,59 @@
'use strict';

// write code here
function extractNumberFromString(textValue) {
let extractedCharacters = '';

for (const char of textValue) {
if (isNaN(char)) {
continue;
}

extractedCharacters += char;
}

return +extractedCharacters;
}

function getEmployees(list) {
return [...list.childNodes]
.filter((el) => el.nodeType === 1 && el.dataset.salary)
.map((el) => ({
name: el.textContent.trim(),
position: el.dataset.position,
salary: extractNumberFromString(el.dataset.salary),
age: extractNumberFromString(el.dataset.age),
}));
}

function sortList(list) {
getEmployees(list)
.sort((el1, el2) => {
const el1Salary = el1.salary;
const el2Salary = el2.salary;

if (el1Salary > el2Salary) {
return -1;
} else if (el1Salary < el2Salary) {
return 1;
} else {
return 0;
}
})
.forEach((el) => {
/* I don't want to create new nodes and delete old ones
* when I can just rearrange existing ones
* because that teaches bad practices
*/
const elNode = employees.find(
(employee) => employee.textContent.trim() === el.name,
);
Comment on lines +47 to +49

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The sortList function relies on the employees variable which is defined in the global scope (on line 57). This makes the function less predictable and harder to reuse because it depends on an external variable that isn't passed as a parameter.

A better approach is to make the function self-contained. For example, you could get the list of DOM nodes from the list parameter at the beginning of this function and use that local variable here.


list.insertAdjacentElement('beforeend', elNode);
});
}

const employeeList = document.querySelector('ul:has(>[data-salary]');

const employees = [...document.querySelectorAll('ul>[data-salary]')];

sortList(employeeList);