Как к одному массиву применить toLowerCace и indexOf?
Есть массив
["php", "kotlin", "php", "css", "CSS", "Kotlin", "python" ,"script", "script",
"html", "HTML", "java", "c++", "Html", "Ruby",];
Нужно написать функцию, которая возвращает массив, в котором удалены повторяющиеся элементы из массива.
ps: Мы не знаем в каком регистре у нас будут строки в массиве.
Застопорился на том, что не могу понять, как, после того как привел все в нижний регистр, осуществить удаление повторяющихся элементов.Пробую с помощью indexOf но лучшее чего я добился это то что indexOf не видит того что применялся toLowerCace и соответственно не сортирует повторяющиеся элементы.
var arr = ["php", "kotlin", "php", "css", "CSS", "Kotlin", "python", "script", "script",
"html", "HTML", "java", "c++", "Html", "Ruby",
];
var result = [];
function rerepeat() {
arr.forEach(function(item) {
var newArr = item.toLowerCase();
if (result.indexOf(item) === -1) {
result.push(item);
}
console.log(result);
});
}
rerepeat();
Ответы (1 шт):
Автор решения: Денис Степанов
→ Ссылка
Плохое решение, если нужны элементы из массива. @Grundy
const arr = ["Php", "Kotlin", "Php", "Css", "CSS", "Kotlin", "python", "script", "script",
"html", "HTML", "java", "c++", "Html", "Ruby", "JAva", "HTml", "RUby",
];
const getFiltered = (arr) => [...(new Set(arr.map(_ => _.toLowerCase())))];
console.log(getFiltered(arr));
Если вам все таки из исходного массива надо элементы выбрать :)
const arr = ["Php", "Kotlin", "Php", "Css", "CSS", "Kotlin", "python", "script", "script",
"html", "HTML", "java", "c++", "Html", "Ruby", "JAva", "HTml", "RUby",
];
function getFilteredList(arr) {
const toLowerCase = "".split.call.bind("".toLowerCase);
const toLowerSet = new Set(arr.map(toLowerCase));
return arr.filter(word => (toLowerSet.has(word.toLowerCase()) && toLowerSet.delete(word.toLowerCase())))
}
console.log(getFilteredList(arr))