JavaScript: создание функции, которая возвращает объект, чьи ключи соответствуют элементам в массиве значений, с помощью обратных вызовов - PullRequest
0 голосов
/ 11 июня 2019

Моя цель заключается в следующем:

Создайте функцию multiMap, которая будет принимать два массива - массив значений и массив обратных вызовов. multiMap вернет объект, ключи которого соответствуют элементам в массиве значений. Соответствующие значения, которые назначены клавишам, будут массивами, состоящими из выходных данных из массива обратных вызовов, где входом для каждого обратного вызова является ключ.

Я попробовал код ниже:

const multiMap = (arrOne, arrTwo) => {

  let newObj = {}; 

  for (let i=0; i<arrOne.length; i++){
    let element = arrOne[i]; 

    console.log(i)

    newObj[element] = arrTwo[i](element); 
  }
  return newObj; 
}



// Uncomment these to check your work!
function uppercaser(str) { return str.toUpperCase(); }
function capitalize(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }
function repeater(str) { return str + str; }

// arrOne
const items = ['catfood', 'glue', 'beer'];
// arrTwo
const functions = [uppercaser, capitalize, repeater];


console.log(multiMap(items, functions));

Мой код возвращает: { catfood: 'CATFOOD', glue: 'Glue', beer: 'beerbeer' }

Я хочу вернуть: { catfood: ['CATFOOD', 'Catfood', 'catfoodcatfood'], glue: ['GLUE', 'Glue', 'glueglue'], beer: ['BEER', 'Beer', 'beerbeer'] }, 'Beer', 'beerbeer'] }

Что я делаю не так?

Примечание: я знаю, что могу использовать модифицирующие функции (то есть, уменьшить), чтобы сделать это, но я хочу сначала выяснить это, используя цикл for.

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Вы должны перебрать массив функций, чтобы создать связанный массив результатов.

const multiMap = (arrOne, arrTwo) => {

  let newObj = {}; 

  for (let i=0; i<arrOne.length; i++){
    let element = arrOne[i]; 

    console.log(i)

    var arr = [];
    for (let f=0;f<functions.length;f++) {
      arr.push(functions[f](element));
    }

    newObj[element] = arr; 
  }
  return newObj; 
}



// Uncomment these to check your work!
function uppercaser(str) { return str.toUpperCase(); }
function capitalize(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }
function repeater(str) { return str + str; }

// arrOne
const items = ['catfood', 'glue', 'beer'];
// arrTwo
const functions = [uppercaser, capitalize, repeater];


console.log(multiMap(items, functions));
0 голосов
/ 11 июня 2019

Проблема в том, что вы зацикливаетесь только на первый массив. Вы должны пройти все функции для каждого значения в массиве один.

const multiMap = (arrOne, arrTwo) => {

  let newObj = {}; 

  for (let i=0; i<arrOne.length; i++){
    let element = arrOne[i];
    newObj[element] = [];
    for(let j=0;j < arrTwo.length; j++) {
     
    newObj[element].push(arrTwo[j](element)); 
    }
  }
  return newObj; 
}



// Uncomment these to check your work!
function uppercaser(str) { return str.toUpperCase(); }
function capitalize(str) { return str[0].toUpperCase() + str.slice(1).toLowerCase(); }
function repeater(str) { return str + str; }

// arrOne
const items = ['catfood', 'glue', 'beer'];
// arrTwo
const functions = [uppercaser, capitalize, repeater];


console.log(multiMap(items, functions));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...