Как насчет того, чтобы НЕ выбрасывать исключения и НЕ использовать медленное регулярное выражение?
return str1 != null && str2 != null
&& typeof str1 === 'string' && typeof str2 === 'string'
&& str1.toUpperCase() === str2.toUpperCase();
Вышеприведенный фрагмент предполагает, что вы не хотите, чтобы строка была нулевой или неопределенной.
Если вы хотите совместить null / undefined, то:
return (str1 == null && str2 == null)
|| (str1 != null && str2 != null
&& typeof str1 === 'string' && typeof str2 === 'string'
&& str1.toUpperCase() === str2.toUpperCase());
Если по какой-то причине вам небезразличен неопределенный vs null:
return (str1 === undefined && str2 === undefined)
|| (str1 === null && str2 === null)
|| (str1 != null && str2 != null
&& typeof str1 === 'string' && typeof str2 === 'string'
&& str1.toUpperCase() === str2.toUpperCase());
Простым примером является следующее:
# Imports
from collections import Counter
import numpy as np
from sklearn.datasets import load_breast_cancer
from sklearn.preprocessing import Imputer
from imblearn.over_sampling import SMOTE
from imblearn.pipeline import make_pipeline
# Load data
bc = load_breast_cancer()
X, y = bc.data, bc.target
# Initial number of samples per class
print('Number of samples for both classes: {} and {}.'.format(*Counter(y).values()))
# SMOTEd class distribution
print('Dataset has %s missing values.' % np.isnan(X).sum())
_, y_resampled = SMOTE().fit_sample(X, y)
print('Number of samples for both classes: {} and {}.'.format(*Counter(y_resampled).values()))
# Generate artificial missing values
X[X > 1.0] = np.nan
print('Dataset has %s missing values.' % np.isnan(X).sum())
_, y_resampled = make_pipeline(Imputer(), SMOTE()).fit_sample(X, y)
print('Number of samples for both classes: {} and {}.'.format(*Counter(y_resampled).values()))
SMOTE не выполняет заполнение ваших отсутствующих значений или значений NaN. Вам необходимо заполнить их, а затем подать на анализ SMOTE. Работа с отсутствующими значениями - совсем другая задача, вы можете взглянуть на Imputer из sklearn для начала. Вот еще одна запись в sklearn относительно отсутствующих значений: Ввод недостающих значений
Как только вы закончите работу с значениями NaN, затем подайте ваши измененные данные на SMOTE
.
Ссылки