如果索引匹配,则将新数据压入数组



我有一个名为"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。

最新更新