在 JavaScript 函数之后保留原始数组
Keep original array after JavaScript function
我相信有一个简单的答案,尽管我只有PHP的经验。为什么当我将"pizza"数组作为"my_pizza"传递给我的函数并且只对"my_pizza"进行更改时,它会发生变化?如何保留传递给函数外部函数的原始数组?函数运行完毕后,披萨数组应该没有更改。我注意到如果我更改我的字符串变量(pie),它在函数运行后将保持不变,这与数组不同。
简而言之,我希望第一组结果与第二组结果相同。
var pizza = [];
pizza.push('crust');
pizza.push('ham');
var pie = "apple"
function bake_goods(my_pizza, my_pie){
console.log(my_pizza);
console.log(my_pie);
delete my_pizza['1'];
my_pie = "peach";
console.log(my_pizza);
console.log(my_pie);
}
//first run
bake_goods(pizza, pie);
//console logs
//['crust','ham']
//apple
//['crust']
//peach
//second run
bake_goods(pizza, pie);
//console logs
//['crust']
//apple
//['crust']
//peach
你应该
在函数中克隆(创建)数组的副本
function bake_goods(my_pizza, my_pie){
var innerPizza = my_pizza.slice(0);
console.log(innerPizza);
console.log(my_pie);
delete innerPizza ['1'];
my_pie = "peach";
console.log(innerPizza );
console.log(my_pie);
}
数组和对象作为指向原始对象的指针传递。如果不想修改原件,则需要先制作副本。
function bake_goods(my_pizza, my_pie) {
my_pizza = my_pizza.slice(0);
delete my_pizza[1];
}
"pizza" 数组更改,因为该函数显然是通过引用调用的。 该函数通过内存中初始化函数外部变量的相同位置操作参数。 您可以通过创建 my_pizza 数组及其元素的副本并使用它来避免这些不需要的更改。
使用它,强制JavaScript在本地上下文中而不是在全局上下文中编辑对象,您还需要克隆对象。
function bake_goods(my_pizza, my_pie){
this.my_pizza = my_pizza.slice(0);
console.log(this.my_pizza);
console.log(this.my_pie);
delete this.my_pizza['1'];
this.my_pie = "peach";
console.log(this.my_pizza);
console.log(this.my_pie);
}
相关文章:
- 修改后的原始数组值
- 为什么数组上的 js 映射会修改原始数组
- 从作为参数传入的数组中删除对象不会修改原始数组 (Angular)
- 如何避免在使用$filter后更新原始数组
- 在 JavaScript 函数之后保留原始数组
- 用于复制可能影响原始数组的数组的函数
- 通过 Array.prototype.slice() 更改克隆的数组会影响原始数组
- 比较两个数组并返回一个新数组,其中包含仅在其中一个原始数组中找到的任何项目
- 保持原始数组不变,更改函数中的本地副本
- 更改数组的值将更改原始数组JavaScript
- 创建数组的副本并操作原始数组
- 创建一个方法来编辑原始数组,而不是返回一个新数组
- 如果我在 JavaScript 中拼接克隆的数组,为什么我的原始数组会被拼接
- Javascript在创建子数组时使用原始数组
- 复制和更新数组值更新原始数组值javascript
- 对一串数字进行排序,每个数字里面都有一个字母.确保在原始数组中保持相同的重复项位置
- 如果array .prototype.slice()方法返回浅拷贝,为什么改变切片数组的值不会改变原始数组
- 在不转换原始数组的情况下迭代多维数组
- 根据原始数组的内容在0 (n)内过滤对象数组
- 在javascript中基于一个原始数组创建新数组并按其排序