можно ли этот код оптимизировать(сократить и улучшить)?
код проверяет на совпадение в массиве введенного числа и возвращает true/false, число может начинаться как с 1 так и с 0 и содержать пробелы
код рабочий просто интересно то что я написал можно ли оптимизировать
let arr1 = ['043','099','011']
let num = ' 099 '
let retBool = (arr,num) =>{
let oneItem;
for(let item = 0; item< arr.length; item++) {
oneItem = num.replace(/\s/g,'')
if(oneItem.length < 4
&& (oneItem.startsWith('0') || oneItem.startsWith('1'))
&& (oneItem === arr[item] || oneItem === arr[item].replace(/^\d/,'1'))){
return true
}else{
continue
}
}
return false
}
let x = retBool(arr1,num)
console.log(x);
Ответы (2 шт):
Автор решения: Leonid
→ Ссылка
let arr1 = ['043','099','011'];
let num = ' 099 ';
let n = num.replace(/\s/g,'');
let x = arr1.some(i => n === i || n === i.replace(/^\d/,'1'));
console.log(x);
Автор решения: OPTIMUS PRIME
→ Ссылка
let arr = ['043', '099', '011'];
console.log( includes(arr, ' 099 ') ); // true
console.log( includes(arr, ' 199 ') ); // true
console.log( includes(arr, '0 99 ') ); // false
// *trim убирает пробелы только справа и слева. Внутренние не трогает.
function includes(arr, num) {
num = num.trim().replace(/^1/, "0");
return arr.includes(num);
}
- Ну почти то же самое делается обычным перебором. Просто хорошо бы заранее обработать полученную строку и отправить в цикл на проверку строго то, что должно совпасть ( везде на проверку идет уже строка "099" )
let arr = ['043', '099', '011', '177'];
console.log( includes(arr, ' 099 ') ); // true
console.log( includes(arr, ' 199 ') ); // true
console.log( includes(arr, '0 9 9 ') ); // true
console.log( includes(arr, ' 077 ') ); // false (!)
function includes(arr, str) {
str = str.replace(/\s/g, "").replace(/^1/, "0");
for( let i = 0; i < arr.length; i++ ) {
if( arr[i] === str ) return true;
}
return false;
}