Довольно просто.
Мне нужно создать функцию objOfMatches
, которая принимает два массива и обратный вызов. objOfMatches создаст объект и вернет его. Чтобы построить объект, objOfMatches
проверит каждый элемент первого массива, используя обратный вызов, чтобы увидеть, соответствует ли вывод соответствующему элементу (по индексу) второго массива. Если есть совпадение, элемент из первого массива становится ключом в объекте, а элемент из второго массива становится соответствующим значением.
function objOfMatches(array1, array2, callback) {
//create obj
var obj = {}
//loop thru first array
for(let i = 0; i < array1.length; i++) {
for (let j = 0; j < array2.length; j++) {
if (callback(array1[i]) === array2[j]) {
obj.array1[i] = array2[j];
}
}
}
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' }
Выглядит довольно просто, но я не совсем понимаю, почему он выдает TypeError в консоли. (TypeError: Cannot set property '0' of undefined)
Может кто-нибудь объяснить, что происходит?
obj[array1[i]] = array2[j];
. - person Ori Drori   schedule 13.09.2018obj.array1[i] = array2[j]
; не похоже на синтаксическую ошибку. Я был явно не прав. - person leonardofed   schedule 13.09.2018obj.array1[i] = array2[j]
-> установить индекс i массива свойств obj в значение, а не устанавливать ключ по имени текста, который находится в индексе i в массиве. - person Ori Drori   schedule 13.09.2018'hello'
не является частью вашего ожидаемого результата? - person connexo   schedule 14.09.2018howdy
тоже нет в нем? Это совсем не довольно просто. - person connexo   schedule 14.09.2018