将对象添加到具有功能的对象数组中?

问题描述

我了解将对象添加到数组所需的命令。我知道它的array.push(object)

但是,说我有这个对象数组:

const artists = [{
    "rank": 1,"name": "Rakim","year": 1985,"album": "Paid in Full",},{
    "rank": 2,"name": "Nas","year": 1994,"album": "Illmatic"
  }
]

如果我需要添加一个新的功能。我该怎么办?而且我想使其功能可以使我将来添加多个。

类似,

function addArtist(array {}) {
  return array;
}

console.log(addArtist(array {
  new object here
}));

解决方法

您需要使用spread operatorarray个对象传递给函数,并将其传递给初始的artists(应为let):

let artists = [
  {
    "rank": 1,"name": "Rakim","year": 1985,"album": "Paid in Full"
  },{
    "rank": 2,"name": "Nas","year": 1994,"album": "Illmatic"
  }
]


function addArtist (artistsToAdd) {
     artists.push(...artistsToAdd);
     return artists;
}

const objects = [
  {
    "rank": 3,"name": "Bob","year": 1995,"album": "Album3"
  },{
    "rank": 4,"year": 1992,"album": "Album4"
  }
];
console.log(addArtist(objects));

您还可以使用concat将对象添加到列表中。

,

如果要将代码分成多个文件,并且不想使用全局artists变量污染全局范围,或者您不想使用artists界面使用多个变量,可以使用:

function addToArtists(artists,...newArtists) {
  artists.push(...newArtists);
  return artists;
}

上面的脚本修改了作为第一个参数传递的数组,因为数组是JavaScript中的引用类型。

但是,上面建议的功能(无类型检查)几乎是通用的addToArray功能。因此,从编程风格的角度来看,我将考虑采用更精确的实现,例如:

function addArtist(artists,rank,name,year,album) {
  artists.push({rank,album});
  return artists;
}
,

如果您一次只需要添加一个新歌手,例如,根据用户在页面上的输入,您可以执行以下操作:

const artists = [{
    "rank": 1,"album": "Illmatic"
  }
]

function addNewArtist(r,n,y,a) {
  artists.push({"rank": r,"name": n,"year": y,"album": a});
}

addNewArtist(3,"Bob",1999,"His new one");
addNewArtist(4,"Joe",2015,"His latest one");

console.log(artists);