В других статьях говорится об удалении строк из массива на основе поискового запроса.
Но я пытаюсь определить, какие элементы являются строками, а какие - числами в массиве, а затем удалить все строки, чтобы вернуть новый массив.
function filter_list(l) {
// Initiate new array
let newArray = [];
// Loop through items in the array
for (let i = 0; i < l.length; i ++) {
// If the element is not in a string, add it to newArray
if (i !== "^[a-zA-Z0-9_.-]*$") {
newArray = newArray + i;
}
}
return newArray;
}
Это возвращается 0123
.
if (i !== "^[a-zA-Z0-9_.-]*$")
не работает? Как еще я могу проверить, когда элемент является строкой (что-то в кавычках) в массиве?https://www.codewars.com/kata/list-filtering/train/javascript
Спасибо
Вы можете это ключевое слово typeof
. и filter()
. Я проверил код, пройдя все тесты в codewars.
Использование функции стрелки ES6
function filter_list(l) {
return l.filter(x => typeof x === "number");
}
console.log(filter_list([1,2,'a','b']))
Без функции стрелки
function filter_list(l) {
return l.filter(function(x){
return typeof x === "number"
});
}
console.log(filter_list([1,2,'a','b']))
Использование простых циклов
function filter_list(l) {
let newArr = [];
for(let i = 0;i<l.length;i++){
if(typeof l[i] === "number") newArr.push(l[i]);
}
return newArr
}
console.log(filter_list([1,2,'a','b']))
=>
что там делает? Или переписать функцию в традиционном формате?
function(x) { return typeof x !== "string"; }
Regex не является хорошим способом для анализа такой таблицы. Попробуй isNaN
console.log(
[1,2,3,4,5, 'a', 'b', 1, 3].filter(item => !isNaN(item) ? item : '')
)
Если вы хотите менее хакерский способ, попробуйте
function filter_list(l) {
// l is very bad name, because look similar to i
let newArray = [];
for (let i = 0; i < l.length; i ++) {
!isNaN(l[i]) ? newArray.push(l[i]) : ''
}
return newArray;
}
или даже
for (let i = 0; i < l.length; i ++) {
!isNaN(l[i]) ? newArray[i] = l[i] : ''
}
Однако, эта задача может быть выполнена с помощью регулярных выражений, но я не могу рекомендовать это решение.
[1,2,3,4,5, 'a', 'b', 1, 3].join(' ').replace(/\D/gm, '').split('')
newArray = newArray + i;
не так, как добавление новых элементов в существующий массив работает в JavaScriptpush