【问题标题】:Array of objects in JavascriptJavascript中的对象数组
【发布时间】:2017-02-28 22:54:27
【问题描述】:

我是学习 Javascript 的新手。在这个阶段,我想使用/贴花/初始化一个对象数组。

这是我初始化对象的代码:

function player(name){
    this.name = name;

    this.getName = function(){
        alert(this.name);
    }
}

这里是我需要使用玩家(对象)数组的地方

function hallOfFame(nbrPlayers){
    var arrayOfPlayers = [] 

}

谁能帮我请教如何创建这个对象数组。提前谢谢你:)

【问题讨论】:

  • 什么是nbrPlayers
  • 我能告诉你一些更简单的方法来创建对象数组吗? (:
  • var arrayOfPlayers = [ new player('Elitia'), new player('Mike') ]; 更多示例请参见MDN's documentation
  • @JustinTaddei :nbrPlayers 表示我想用来构建数组的对象数量。我想在 C 中创建一个这样的数组,arrayOfPlayers[nbrPlayers]
  • 数组在 javascript 中不能这样工作,它们没有大小

标签: javascript arrays object javascript-objects


【解决方案1】:
function createPlayerArray(number) {
  var players = [];
  for (i = 0; i < number; i++) {
    players.push(new Player("No Name"));
  }
  return players;
}

这将创建一个玩家数组

【讨论】:

    【解决方案2】:

    在实例化新的 HallOfFame 时,您可以执行以下操作来创建玩家数组。 addPlayer 原型可以让您稍后将新玩家添加到阵列中。通常 - 您不需要在 javascript 中为数组指定固定长度。大小是灵活的,所以你可以创建一个空数组来拥有一个玩家数组,然后推到它上面。

    function Player(name){
        this.name = name;
    
        this.getName = function(){
            alert(this.name);
        }
    }
    
    function HallOfFame(players) {
     	this.players = Array.from(players);
    }
    
    HallOfFame.prototype.addPlayer = function(player) {
    	this.players = this.players.concat(player);
    }
    
    
    let p1 = new Player("foo");
    let p2 = new Player("bar");
    let p3 = new Player("baz");
    
    let hOf = new HallOfFame([p1,p2]); // instantiate HallOfFame and add two players
    
    hOf.addPlayer(p3); // add another player
    
    console.log(hOf); // will show you an HallOfFame object holding 3 players

    【讨论】:

    • @baao,stackoverflow 中的社区。非常感谢您的帮助和时间。这符合我的要求,并且比任何教程或课程都能帮助我更多地了解 JS。上帝保佑你
    • 在 ES6 中,我建议使用 Array.from(players) 来制作副本,而不是 [].concat
    • 感谢@Bergi,这让事情变得更简单了!
    • 不一定更容易,但肯定更明显:D
    【解决方案3】:

    仅供学习,如果太简单告诉我,我会删除它。

    var dogs = ['Gustavo', 'Heisen', 'Berg', 'Jessie'],
        race = ['Labrador', 'Doberman', 'Spaniel', 'Husky'],
        result = [];
        
        dogs.forEach(function(v,i){ //iterate over each element from dogs array
          var obj = {}; //create an empty object to store our data
          obj[v] = race[i]; //assign a key (which is name of the dog) and it's value (his race) to obj
          result.push(obj); //push object into the result array
        });                 //repeat! (:
        
        console.log(result); //show our array of objects!

    【讨论】:

    • 这很有帮助。谢谢@Kind 用户 :)
    【解决方案4】:

    当您使用player 函数创建对象时,class 声明似乎是一个很好的用例,其目的是“提供更简单和更清晰的语法来创建对象”:

    class Player {
        constructor(name) {
            function capitalizeName(fullName) {
              return fullName
              .split(' ')
              .map((s) => {
                return `${s.charAt(0).toUpperCase()}${s.slice(1).toLowerCase()}`
              })
              .join(' ')
            }
            this.name = capitalizeName(name)
        }
    
        getName () {
          return this.name
        }
    
        alertName () {
          alert(this.getName())
        }
    }
    

    然后您可以使用map 方法从字符串数组中创建一个Players 数组,如下所示:

    function hallOfFame(playerNames) {
      return playerNames.map((playerName) => new Player(playerName))
    }
    

    您可以使用forEach 方法测试该函数:

    > let myPlayerNames = ['ADA', 'bob', 'CaRlA', 'DenniS', 'ElITIa']
    > let myHallOfFame = hallOfFame(myPlayerNames)
    > myHallOfFame.forEach((player) => player.alertName())
    

    【讨论】:

    • 非常感谢。这是一个新概念,对我很有帮助
    • @ElitiaCandy 没问题。我更新了capitalizeName 函数来处理全名。我相信,最终,您还会想了解functional programmingimmutability,这也是此答案中存在的重要概念。
    • 我会看看这些链接。你真是太好了。非常感谢@Marcus
    【解决方案5】:
    //making array of books
    var books = [];
        var new_book = {id: "book1", name: "twilight", category: "Movies", price: 10};
        books.push(new_book);
        new_book = {id: "book2", name: "The_call", category: "Movies", price: 17};
        books.push(new_book);
        console.log(books[0].id);
        console.log(books[0].name);
        console.log(books[0].category);
        console.log(books[0].price);
    
    // also we have array of albums
    var albums = []    
        var new_album = {id: "album1", name: "Ahla w Ahla", category: "Music", price: 15};
        albums.push(new_album);
        new_album = {id: "album2", name: "El-leila", category: "Music", price: 29};
        albums.push(new_album);
    //Now, content[0] contains all books & content[1] contains all albums
    var content = [];
    content.push(books);
    content.push(albums);
    var my_books = content[0];
    var my_albums = content[1];
    console.log(my_books[0].name);
    console.log(my_books[1].name); 
    
    console.log(my_albums[0].name);
    console.log(my_albums[1].name); 
    

    这个例子适用于我: Expected output

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2015-08-07
      • 1970-01-01
      • 2020-07-25
      • 2011-09-29
      相关资源
      最近更新 更多