将新属性添加到现有的对象数组中

发布于 2025-02-11 19:06:08 字数 1871 浏览 1 评论 0原文

我在我的React应用程序中使用formik,并具有以下初始值,这只是其中的一部分:

"myInfo": [
            {
                "myId": 0,
                "myName": "Name A",
                "defaultVal": 2
            },
            {
                "myId": 1,
                "myName": "Name B",
                "defaultVal": 4
            }
]

我试图做的是尝试在此数组中添加新属性,但运气不多。

我的代码如下:

const getAdditionalData = async (id, idx) => {
  try {
    const response = await fetch(`http://localhost:3000/more-data/${id}`);
    const myData = await response.json();

    myInfo[idx].vals = myData;
  } catch (err) {
    console.error(err.message);
  }
};        

useEffect(() => {
  myInfo.map((info, index) => {
    getAdditionalData(info.myId, index)
  });
}, []); 

fyi,返回mydata中的值是另一个看起来像这样的对象的数组:

myid = 0,它返回:

[{id: 1, name: 'AA'}
 {id: 2, name: 'BB'}]

wher code> myid < /code> = 1它返回:

[{id: 3, name: 'CC'}
 {id: 4, name: 'DD'}
 {id: 5, name: 'EE'}]

我试图做的是在数组循环中,我想在myInfo array中添加一个新属性。我尝试了以下内容,但无效:

myInfo [idx] .vals = mydata;

我追求的最终结果如下:

"myInfo": [
            {
                "myId": 0,
                "myName": "Name A",
                "defaultVal": 2,
                "vals": [
                   {id: 1, name: 'AA'},
                   {id: 2, name: 'BB'}
                ]
            },
            {
                "myId": 1,
                "myName": "Name B",
                "defaultVal": 4,
                "vals": [
                   {id: 3, name: 'CC'},
                   {id: 4, name: 'DD'},
                   {id: 5, name: 'EE'}
                ]
            }
]

您会看到vals的新属性已添加。

任何帮助都将不确定我缺少什么。

I am using Formik within my React app and have the following initial values, which is just a portion of it:

"myInfo": [
            {
                "myId": 0,
                "myName": "Name A",
                "defaultVal": 2
            },
            {
                "myId": 1,
                "myName": "Name B",
                "defaultVal": 4
            }
]

What I am attempting to do is to try and add a new property to this array of objects but not having much luck.

My code is as follows:

const getAdditionalData = async (id, idx) => {
  try {
    const response = await fetch(`http://localhost:3000/more-data/${id}`);
    const myData = await response.json();

    myInfo[idx].vals = myData;
  } catch (err) {
    console.error(err.message);
  }
};        

useEffect(() => {
  myInfo.map((info, index) => {
    getAdditionalData(info.myId, index)
  });
}, []); 

FYI, the values returned in myData is another array of objects that looks like this:

when myId = 0 it returns:

[{id: 1, name: 'AA'}
 {id: 2, name: 'BB'}]

when myId = 1 it returns:

[{id: 3, name: 'CC'}
 {id: 4, name: 'DD'}
 {id: 5, name: 'EE'}]

What I am attempting to do is that while within the array loop, I want to add a new property within myInfo array. I tried the following, which didn't work:

myInfo[idx].vals = myData;

The end result that I am after is the following:

"myInfo": [
            {
                "myId": 0,
                "myName": "Name A",
                "defaultVal": 2,
                "vals": [
                   {id: 1, name: 'AA'},
                   {id: 2, name: 'BB'}
                ]
            },
            {
                "myId": 1,
                "myName": "Name B",
                "defaultVal": 4,
                "vals": [
                   {id: 3, name: 'CC'},
                   {id: 4, name: 'DD'},
                   {id: 5, name: 'EE'}
                ]
            }
]

You will see that a new property of vals has been added.

Any help would be much appreciated as not sure what I am missing.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

轮廓§ 2025-02-18 19:06:08

什么是myInfo?状态,班级或参考变量?还要考虑到MAP返回一个全新的数组,因此不会突变。

您可以尝试此操作,应该在mynewinfo中查看更新的阵列:

useEffect(() => {
  const myNewInfo = myInfo.map((info, index) => ({
    ...info,
    vals: getAdditionalData(info.myId, index)
  }));
}, []);

What is myInfo? A state, class or ref variable? Also take into consideration that map returns a brand new array so it doesn't mutate.

You can try this and you should see the updated array in myNewInfo:

useEffect(() => {
  const myNewInfo = myInfo.map((info, index) => ({
    ...info,
    vals: getAdditionalData(info.myId, index)
  }));
}, []);
尤怨 2025-02-18 19:06:08

以下是本机JavaScript中我从我这里奏效的内容:

const getAdditionalData = async () => {
  try {
    const response = await fetch(`http://localhost:5500/data.json`);
    const myData = await response.json();
    let newObj = [];
    myData.myInfo.map((data, i) => {
      newObj = [...newObj, { ...data, val: [...valObj[i]] }];
    });
    console.dir(newObj);
  } catch (err) {
    console.error(err.message);
  }
};

const valObj = [
  [
    { id: 1, name: "AA" },
    { id: 2, name: "BB" },
  ],
  [
    { id: 3, name: "CC" },
    { id: 4, name: "DD" },
    { id: 5, name: "EE" },
  ],
];

getAdditionalData();


//data.json

{
  "myInfo": [
    {
      "myId": 0,
      "myName": "Name A",
      "defaultVal": 2
    },
    {
      "myId": 1,
      "myName": "Name B",
      "defaultVal": 4
    }
  ]
}

请注意,您需要同步myInfovalobj的索引。

Here's what worked from me in native javascript:

const getAdditionalData = async () => {
  try {
    const response = await fetch(`http://localhost:5500/data.json`);
    const myData = await response.json();
    let newObj = [];
    myData.myInfo.map((data, i) => {
      newObj = [...newObj, { ...data, val: [...valObj[i]] }];
    });
    console.dir(newObj);
  } catch (err) {
    console.error(err.message);
  }
};

const valObj = [
  [
    { id: 1, name: "AA" },
    { id: 2, name: "BB" },
  ],
  [
    { id: 3, name: "CC" },
    { id: 4, name: "DD" },
    { id: 5, name: "EE" },
  ],
];

getAdditionalData();


//data.json

{
  "myInfo": [
    {
      "myId": 0,
      "myName": "Name A",
      "defaultVal": 2
    },
    {
      "myId": 1,
      "myName": "Name B",
      "defaultVal": 4
    }
  ]
}

Note that you would need to sync the indices of myInfo and valObj.

无法回应 2025-02-18 19:06:08

看来您正在尝试使用像对象这样的JSON字符串。他们必须是

请参阅以下示例。

const myInfo = `[
  {
    "myId": 0,
    "myName": "Name A",
    "defaultVal": 2
  },
  {
    "myId": 1,
    "myName": "Name B",
    "defaultVal": 4
  }
]`;

const myData = `[
  {"id": 3, "name": "CC"},
  {"id": 4, "name": "DD"},
  {"id": 5, "name": "EE"}
]`;

const parsedInfo = JSON.parse(myInfo);
const parsedData = JSON.parse(myData);

parsedInfo[0].vals = parsedData;

console.log(parsedInfo[0]);

It looks like you are attempting to use JSON strings like objects. They have to be parsed first.

See the following example.

const myInfo = `[
  {
    "myId": 0,
    "myName": "Name A",
    "defaultVal": 2
  },
  {
    "myId": 1,
    "myName": "Name B",
    "defaultVal": 4
  }
]`;

const myData = `[
  {"id": 3, "name": "CC"},
  {"id": 4, "name": "DD"},
  {"id": 5, "name": "EE"}
]`;

const parsedInfo = JSON.parse(myInfo);
const parsedData = JSON.parse(myData);

parsedInfo[0].vals = parsedData;

console.log(parsedInfo[0]);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文