繁体   English   中英

如何将数组作为对象数组返回?

[英]How to return an array as an array of objects?

我有以下练习:

  • 编写一个名为createListOfObjects的函数,该函数接受一个
  • 包含名字和姓氏并返回的字符串数组
  • 每个对象都有属性firstName的数组
  • lastName以及名字和姓氏值
  • 对应值*
  • var namesList = ['Cameron Betts','Shana Lopez','Angela Li'] *
  • 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());

但是它返回以下内容:

在此处输入图片说明

我必须从数组中提取名称,然后将其拆分以用于我的for,但我不知道我该怎么做。

一种选择是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()); 

拆分数组项以提供名字和姓氏,然后重新创建一个新数组,并将每个数组作为对象传递。 请注意,如果对象键的名称与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); } 

您无需在空格上拆分名称字符串,以分隔名字和姓氏。 另外,对于每个名称,您都要遍历每个名​​称。 意思是,如果您将名称拆分为正确的名称,那么您将以每个名字和每个姓氏结尾。 您想要的是:

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 };
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM