javascript - VueJS 推送到一个数组也会将值推送到另一个数组
问题描述
是否有任何 vuejs 资深人士在 VueJS(v2) 上体验过这一点,其中您在一个组件上有 2 个数组,并且您将一个值推送到第一个数组,第二个数组也无需触摸它即可获得该值。
这是我第一次遇到这种情况,仅供参考,我已经使用 VueJS 超过 2 年了。
附加信息我有一个非常相似的组件,它完全相同data variables
,但不会发生,仅在第二个组件上。
array1 = [];
array2 = [];
array1.push('gether');
输出应该是
array1 = ['gether'];
array2 = [];
实际发生的事情
array1 = ['gether'];
array2 = ['gether'];
我也玩过 Google DevTools Vue 调试器。
array1
在ONLY上添加条目也会在array2
.
有点令人难以置信
解决方案
当您使两个数组等于相同的值时,您通过引用使它们相等。所以
foo = ['a', 'b', 'z']
array1 = foo;
array2 = foo;
array1.push('d');
console.log(array2) //Outputs: ['a', 'b', 'c', 'd']
是预期的行为。
但是,这与您问题中给出的示例不同。运行下面的代码片段以查看差异。
为避免这种情况,您可以使用slice()
创建原始数组的副本。我在代码片段中添加了一个示例。
let foo = ["a", "b"];
let array1 = foo;
let array2 = foo;
array2.push("c");
console.log(foo); // Outputs ["a", "b", "c"]
console.log(array1); // Outputs ["a", "b", "c"]
let array3 = [];
let array4 = [];
array4.push("a");
console.log(array3); // Outputs []
console.log(array4); // Outputs ["a"]
let bar = ["a", "b"];
let array5 = bar.slice();
bar.push("c");
console.log(bar); // Outputs ["a", "b", "c"]
console.log(array5); // Outputs ["a", "b"]
推荐阅读
- python - 在下一个事件开始时计算已完成的事件
- java - 数独:制作一种读取文件并将每个数独放入二维数组列表的方法。似乎无法读取文件
- jmeter - 我们可以在实现 PKI(公钥基础设施)的 API 上对 JMeter 工具进行性能测试吗?如果可以,如何?
- go - 如何将嵌套的 Struct 转换/转换为 Protobuf?
- java - Java中的泛型类
- javascript - 如何通过单个异步调用将多个音频文件加载到 Web 音频 API 上下文中?
- delphi - Delphi 使用 Gnostice eDocEngine、PDF 工具包创建和修改 PDF
- sql - 我可以只允许为 Oracle 10G 中的表输入某些特定字符串吗?
- mysql - 在 MySQL 中进行重复键更新
- node.js - 来自nodeJS中的get请求的流式axios响应