Здравствуйте! Вопрос короткий. Подскажите пожалуйста, почему возвращается пустой массив:
function objOfMatches(array1, array2, callback) {
let obj = {};
for (let i = 0; i < array1; i++) {
if(callback(array1[i]) == callback(array2[i])){
obj.array1[i] = callback(array2[i]);
}
return obj;
}
console.log(objOfMatches(['hi', 'howdy', 'bye', 'later', 'hello'], ['HI', 'Howdy', 'BYE', 'LATER', 'hello'], function(str) { return str.toUpperCase(); }));
// should log: { hi: 'HI', bye: 'BYE', later: 'LATER' }
dmitry
19.Март.2020 10:43:20
2
В примере - синтаксическая ошибка: до вызова console.log не закрыта }
от функции
i < array1
тут скорее всего ошибка. Ты не то хотел иметь в виду.
Если разбираться самостоятельно эта задача поиска проблемы решается чисто механически : проверь чему равны callback(array1[i])
и callback(array2[i])
в цикле с помощью console.log
. И ты увидишь что или цикл не вызвается или значения не ожидаемые или еще что.
1 лайк
Исправил!
В цикле, заменил array1 на array1.length
добавил скобку }
Сейчас, ошибка следующая: TypeError: Cannot set property ‘0’ of undefined
Уверен, что ошибка здесь: obj.array1[i]
Вопрос просто в синтаксисе, а не в логики. Не знаю, почему так не проходит…
function objOfMatches(array1, array2, callback) {
let obj = {};
for (let i = 0; i < array1.length; i++) {
if(callback(array1[i]) == callback(array2[i])){
// console.log(callback(array2[i]));
obj.array1[i] = callback(array2[i]);
}
}
return obj;
}
dmitry
19.Март.2020 11:29:40
4
Это мы тоже обсуждали с тобой. Это значит что есть где-то код вида EXPRESSION[0]
. И значение EXPRESSION
- undefined
.
Плюс в ошибке есть еще строка где это происходит. Попробуй понять что может пойти не так.
1 лайк
Нашёл ошибку, но до конца не понял, почему нельзя писать так: obj.array[i], а только так obj[array1[i]]
dmitry
19.Март.2020 16:03:26
6
Alex_87:
Нашёл ошибку, но до конца не понял, почему нельзя писать так: obj.array[i], а только так obj[array1[i]]
Что ты имеешь в виду под “нельзя”? Можно писать обе записи. Правда они принципиально разного толка.
Вернее было бы думать “почему эта запись дает ошибку, а эта - нет”.
obj.array[i]
- это обращение к i-тому элементу массива array
что хранится в объекте obj
. При этом если в объекте нет то этот код даст ошибку.
obj[array1[i]]
это обращение к свойству объекта obj
с таким названием как значение array1[i]
.
1 лайк