简体   繁体   English

JavaScript 更新数组元素的值

[英]JavaScript updating value of array element

I have below JSON Array and I am trying to add new object to one of the array element, but problem that I am facing is:我有以下 JSON 数组,我正在尝试将新的 object 添加到数组元素之一,但我面临的问题是:
If I push new object for an array array1 at index 0 of arrayHolder then all the array1 elements are getting updated with new object.如果我在arrayHolder 的索引0处为数组array1推送新的arrayHolder ,那么所有array1元素都将使用新的object 进行更新。

{
  "arrayHolder": [
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [],
      "array2": [],
      "array3": [],
      "array4": []
    }
 ]
}

I am using below code to push to array1 :我正在使用下面的代码推送到array1

var jsonStr = "{\"arrayHolder\":[{\"array1\": [],\"....."; // Json String
var jsonObj = JSON.parse(jsonStr); // String To object 

var newObj = {"value": 1}; // New object that I want to push 
jsonObj.arrayHolder[0].array1.push(newObj);

// Even below code has same output
jsonObj.arrayHolder[0]["array1"][0] = newObj;

I get below output:我低于 output:

{
  "arrayHolder": [
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    },
    {
      "array1": [{"value": 1}],
      "array2": [],
      "array3": [],
      "array4": []
    }
 ]
}

I want to update value of array1 only for the 0th element in the arrayHolder array not for all the array1 elements in the main array.我只想为arrayHolder数组中的0th个元素而不是主数组中的所有array1元素更新array1的值。

The issue is with the array holder, it seems that the array holder is using the same object, and so modifying it in one place will cause the change to be reflected in all places.问题在于阵列支架,似乎阵列支架使用的是相同的 object,因此在一处修改它会导致更改在所有地方都反映出来。

Try:尝试:

jsonObj.['arrayHolder'][0]['array1'].push(newObj);

Please try this Solution, @ehab has given you resion why your solution not working, you are using same object to complete object x and as you know object and array are Ref type in Javascript Please try this Solution, @ehab has given you resion why your solution not working, you are using same object to complete object x and as you know object and array are Ref type in Javascript

 var x={ "arrayHolder": [ { "array1": [], "array2": [], "array3": [], "array4": [] }, { "array1": [], "array2": [], "array3": [], "array4": [] }, { "array1": [], "array2": [], "array3": [], "array4": [] }, { "array1": [], "array2": [], "array3": [], "array4": [] } ] } var jsonStr =JSON.stringify(x)// Json String var jsonObj = JSON.parse(jsonStr); // String To object debugger var newObj = {"value": 1}; // New object that I want to push jsonObj.arrayHolder[0].array1.push(newObj); result=JSON.stringify(jsonObj) console.log("result:"+result)

result:{"arrayHolder":[{"array1":[{"value":1}],"array2":[],"array3":[],"array4":[]},{"array1":[],"array2":[],"array3":[],"array4":[]},{"array1":[],"array2":[],"array3":[],"array4":[]},{"array1":[],"array2":[],"array3":[],"array4":[]}]}结果:{"arrayHolder":[{"array1":[{"value":1}],"array2":[],"array3":[],"array4":[]},{"array1": [],"array2":[],"array3":[],"array4":[]},{"array1":[],"array2":[],"array3":[],"array4" :[]},{"array1":[],"array2":[],"array3":[],"array4":[]}]}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM