Код не выдает ошибку undefined
, он просто регистрирует значение undefined
.И это происходит потому, что вы вызываете console.log
для возвращаемого значения addressToCheck
, но функция не возвращает значение, поэтому она неявно возвращает undefined
.См. console.log возвращает дополнительный неопределенный .
Однако в вашем коде больше проблем.Это только случайно работает, когда вы передаете один аргумент, потому что вы используете свободное сравнение (==
).
Значением параметра rest всегда является array .Это означает, что вы действительно проводите следующие сравнения:
[1, 2] == "1"
[1, 2] == "2"
[1, 2] == "3"
Надеюсь, понятно, почему это не сработает.Массив с несколькими элементами не может быть равен одному «элементу», поэтому условие if
никогда не выполняется.
Он работает случайно с одним аргументом, потому что строковое представление [1]
просто "1"
.Строковое представление, если [1,2]
, однако, равно "1,2"
.
Вы не объясняете, каков желаемый результат, но если вы хотите выбрать все адреса для предоставленного ввода, вы должны использовать .filter
.И вы можете преобразовать предоставленные аргументы в набор для быстрого поиска.
Вместо присвоения значений «внешнему» массиву, просто верните результат из функции.
let userAddress = [{
"street": "someStreet1",
"house": "1",
"person": "User1"
}, {
"street": "someStreet2",
"house": "2",
"person": "User2"
}, {
"street": "someStreet3",
"house": "3",
"person": "User3"
}];
let addressToCheck = (...newUserHouse) => {
newUserHouse = new Set(newUserHouse);
return userAddress.filter(address => newUserHouse.has(address.house));
};
console.log(addressToCheck("3", "2"));