【问题标题】:How to return an array as an array of objects?如何将数组作为对象数组返回?
【发布时间】:2019-04-25 15:20:33
【问题描述】:

我有以下练习:

  • 编写一个名为 createListOfObjects 的函数,该函数接受一个
  • 包含名字和姓氏的字符串数组并返回
  • 一个对象数组,每个对象都具有属性firstName
  • lastName 以及名字和姓氏值
  • 对应值 *
  • var namesList = ['Cameron Betts', 'Shana Lopez', 'Angela Li'] *
  • createListOfObjects(namesList)
  • =>
  • [
  • { firstName: 'Camer', lastName: 'Betts'},
  • { firstName: 'Shana', lastName: 'Lopez'},
  • {名字:'安吉拉',姓氏:'李'}
  • ]

到目前为止我的解决方案:

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 中使用,但我不明白我该怎么做。

【问题讨论】:

    标签: javascript arrays object javascript-objects


    【解决方案1】:

    一个选项是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 名称字符串,然后推送到@987654327 @:

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

    【讨论】:

      【解决方案2】:

      拆分数组项以给出名字和姓氏,然后重新分配一个新数组,每个数组都作为对象传递。请注意,如果 objects 键与 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);
      }

      【讨论】:

        【解决方案3】:

        您没有在空格上拆分名称字符串,以分隔名字和姓氏。 此外,对于每个名称,您都在迭代每个名称。 这意味着如果您正确拆分名称,您最终会得到每个名字加上每个姓氏。 你想要的是:

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

        【讨论】:

          猜你喜欢
          • 2014-05-20
          • 1970-01-01
          • 2017-01-23
          • 1970-01-01
          • 2017-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-02
          相关资源
          最近更新 更多