Как вернуть массив как массив объектов? - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть следующее упражнение:

  • Напишите функцию с именем createListOfObjects, которая принимает
  • массив строк с именами и фамилиями и возвращает
  • anмассив объектов, каждый из которых имеет свойство firstName
  • и lastName, а также имена и фамилии
  • соответствующее значение *
  • var namesList = ['Cameron Betts',' Шана Лопес ',' Анжела Ли '] *
  • createListOfObjects (namesList)
  • =>
  • [
  • {firstName:' Camer ', lastName: 'Betts'},
  • {firstName: 'Shana', lastName: 'Lopez'},
  • {firstName: 'Angela', lastName: 'Li'}
  • ]

И мое решение до сих пор:

createListOfObjects = () => {
    let names = ['Cameron Betts', 'Shana Lopez', 'Angela Li'];

  let deck = [];

    for (var i=0; i < names.length; i++){
      for (var k=0; k < names.length; k++){
  deck.push({ fName: names[i], lName: names[k]})
      }
    };
    return deck;
}

console.log(createListOfObjects());

Но оно возвращает следующее:

enter image description here

Я должен извлечь имена из массива и затем разделить их, чтобы использовать в моем for, но я не могу понять, как именно я могу это сделать.

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Разделите элементы массива, чтобы дать им имена и фамилии, а затем заново создайте новый массив, каждый из которых будет передан как объект.Обратите внимание, что если ключ объекта совпадает с именем viariable - вам не нужно указывать его.

var namesList = ['Cameron Betts', 'Shana Lopez', 'Angela Li'] ;
createListOfObjects(namesList);

function createListOfObjects(arr) {
  let newArr = [];
  arr.forEach(function(name){
    var namePortions = name.split(' ');
    var firstName = namePortions[0];
    var lastName = namePortions[1];
    newArr.push ({firstName, lastName});
  })
  console.log(newArr);
}
0 голосов
/ 23 ноября 2018

Вы не разделяете строку имени на пробел, чтобы разделить имя и фамилию.Кроме того, для каждого имени вы перебираете каждое имя.Это означает, что если вы правильно разделите имя, вы получите в итоге каждое имя в сочетании с каждой фамилией.То, что вы хотите, это:

create variable with empty array deckArray.
  iterate over fullNamesArray
  forEach fullNameString
      split the fullNameString on the space character
      to get a tuple (array of two) with [firstName, lastName]
      store firstName and lastName into nameObject
      push nameObject into deckArray
return deckArray

вроде так

const createListOfObjects = (names) => {
  let deck = [];
  for(let i = 0; i < names.length; i += 1) {
    let [ firstName, LastName ] = names[i].split(' ');
    deck.push({ firstName, lastName });
  }
  return deck;
}
const names = ['Cameron Betts', 'Shana Lopez', 'Angela Li'];
createListOfObjects(names);

лучше с картой

const createListOfObjects = (names) => names.map((fullName) => {
  let [ firstName, lastName ] = fullName.split(' ');
  return { firstName, lastName };
});
0 голосов
/ 23 ноября 2018

Один из вариантов: split каждое полное имя, чтобы иметь имя и фамилию, а затем вы можете создать объект из этих двух переменных.В идеале используйте .map для этого - .map является наиболее подходящим методом для преобразования каждого элемента в одном массиве в другой массив:

createListOfObjects = names => names.map((name) => {
  const [firstName, lastName] = name.split(' ');
  return { firstName, lastName };
});
console.log(createListOfObjects(['Cameron Betts', 'Shana Lopez', 'Angela Li']));

Чтобы исправить существующий код, вам нужно будет выполнить итерацию по names только один раз (без вложенных циклов), и на каждой итерации split строка имени и нажмите deck:

const createListOfObjects = () => {
  let names = ['Cameron Betts', 'Shana Lopez', 'Angela Li'];
  let deck = [];

  for (var i=0; i < names.length; i++){
    const fullName = names[i];
    const nameArray = names[i].split(' ');
    const fName = nameArray[0];
    const lName = nameArray[1];
    for (var k=0; k < names.length; k++){
      deck.push({ fName, lName });
    }
  }
  return deck;
}

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