【问题标题】:What is better way to assign Json Array? [duplicate]分配 Json 数组的更好方法是什么? [复制]
【发布时间】:2020-08-28 07:50:36
【问题描述】:
var cars = [{"a":1,"b":2},{"b":3,"c":5}];
var temp=[];
[...cars].map((item)=>{
temp.push(item)
})

temp[0]["a"]=3
console.log(cars[0]["a"]) // op->3`enter code here`

为什么汽车数组的值在改变,而临时数组却改变了?什么是更好的解决方案,使汽车阵列不改变?

【问题讨论】:

  • JSON 是一种用于数据交换的文本符号(More here.) 如果您正在处理 JavaScript 源代码,而不是处理 string,那么您就不是在处理 JSON。
  • temp = cars;?

标签: javascript arrays json reactjs react-native


【解决方案1】:

这里有几个问题,但最根本的是当你创建一个新的数组时,你并没有创建新的对象。所以两个数组都包含相同的对象,因此当您更改其中一个对象的状态时,无论您查看哪个数组,您都会看到该更改。

要制作对象的浅拷贝,您可以使用扩展符号:

var temp = cars.map(obj =>({...obj}));

这会创建一个新数组数组中的新对象。


另外:如果您不打算使用它返回的数组,请不要使用map。某个地方的某个人错误地教人们使用map 只是为了循环浏览事物。这不是正确的工具(而不是use any of these options)。

但是,在您的情况下,由于您确实想要一个新数组,map 是一个不错的选择,只需像上面一样使用它来直接创建您的数组,而不是仅用于循环.

【讨论】:

  • 很棒的解释! ?
【解决方案2】:

您正在对map() 中的对象进行浅拷贝,还需要以正确的方式使用map() 函数。 Map 函数返回一个新数组,因此将其分配给temp。以这种方式进行深度克隆:

var cars = [{
  "a": 1,
  "b": 2
}, {
  "b": 3,
  "c": 5
}];
var temp = [...cars].map((item) => ({ ...item }));

temp[0]["a"] = 3;
console.log("temp: ", temp[0]["a"]);
console.log("cars: ", cars[0]["a"]);

【讨论】:

  • @T.J.Crowder 是的,是的......啊,我忘了在答案中提到这一点。正如最初的问题一样,我只是保持原样。
  • 噢!它在原始问题中,不是吗?当我看到map 而不使用返回值时,我有点忽略了该代码——还不如在公牛面前挥动旗帜! ;-)
猜你喜欢
  • 1970-01-01
  • 2013-06-09
  • 2020-02-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-04
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
相关资源
最近更新 更多