我有一个名为"animeData"包含一个对象数组。
{"table":[{"id":1,"name":"K-on","redirect":"k-on","thumbnail":"/images/anime/k-on/thumbnail.jpg","characters":[{"name":"azusa","thumbnail":"/images/anime/k-on/azusa.jpg","votes":[{"ip":"127.0.0.1"}]},{"name":"mio","thumbnail":"/images/anime/k-on/mio.jpg","votes":[{}]},{"name":"mugi","thumbnail":"/images/anime/k-on/mugi.jpg","votes":[{}]},{"name":"ritsu","thumbnail":"/images/anime/k-on/ritsu.jpg","votes":[{}]},{"name":"yui","thumbnail":"/images/anime/k-on/yui.jpg","votes":[{}]}]},{"id":2}]}
我试图在ID 2下添加一组新的信息,就像我为1所做的那样,从名称开始。我试过animeData.table.filter(x => x.id === 2).push({"name": "Bunny Girl Senpai"});
然而,控制台中没有错误,但"animmedata"也没有。var变化。
数组的filter
方法返回一个包含过滤元素的数组,它是一个对象数组。当我们在数组中获得单个对象时,我们可以将该对象的数组索引设为filteredData[0]
。因为它是一个对象,所以我们可以使用.
符号或[]
语法设置对象的属性。
const animeData = {
table: [
{
id: 1,
name: "K-on",
redirect: "k-on",
thumbnail: "/images/anime/k-on/thumbnail.jpg",
characters: [
{
name: "azusa",
thumbnail: "/images/anime/k-on/azusa.jpg",
votes: [{ ip: "127.0.0.1" }],
},
{ name: "mio", thumbnail: "/images/anime/k-on/mio.jpg", votes: [{}] },
{ name: "mugi", thumbnail: "/images/anime/k-on/mugi.jpg", votes: [{}] },
{
name: "ritsu",
thumbnail: "/images/anime/k-on/ritsu.jpg",
votes: [{}],
},
{ name: "yui", thumbnail: "/images/anime/k-on/yui.jpg", votes: [{}] },
],
},
{ id: 2 },
],
};
const idToSearch = 2;
const filteredData = animeData.table.filter((x) => x.id === 2);
if (filteredData.length) {
const filteredObject = filteredData[0];
filteredObject["name"] = "Bunny Girl Senpai";
}
console.log(animeData);
或与find
const animeData = {
table: [
{
id: 1,
name: "K-on",
redirect: "k-on",
thumbnail: "/images/anime/k-on/thumbnail.jpg",
characters: [
{
name: "azusa",
thumbnail: "/images/anime/k-on/azusa.jpg",
votes: [{ ip: "127.0.0.1" }],
},
{ name: "mio", thumbnail: "/images/anime/k-on/mio.jpg", votes: [{}] },
{ name: "mugi", thumbnail: "/images/anime/k-on/mugi.jpg", votes: [{}] },
{
name: "ritsu",
thumbnail: "/images/anime/k-on/ritsu.jpg",
votes: [{}],
},
{ name: "yui", thumbnail: "/images/anime/k-on/yui.jpg", votes: [{}] },
],
},
{ id: 2 },
],
};
const idToSearch = 2;
const search = animeData.table.find((anime) => anime.id === 2);
search["name"] = "TemporaryName";
search["redirect"] = "temp";
console.log(animeData);
Array.prototype.filter()
根据MDN Web Docs返回一个新的数组。
您可能想使用的是Array.prototype.find()
,根据MDN Web Docs,它返回所提供的数组中满足所提供的测试函数的第一个元素的值。
由于find()
将返回一个对象,我认为你也只是想设置name
属性而不是推入它。像这样:
animeData.table.find(x => x.id === 2)["name"] = "Bunny Girl Senpai";
小心使用find()
方法,如果它不能找到元素,它将返回undefined。