簡體   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