在引用变量中更改时原始数组未更新
Original array not getting updated when changed in referenced variable
为了我的工作,我需要访问嵌套对象数组。我不想每次都使用完整路径访问它。所以我想通过将实际引用分配给变量来缩短引用。
我试图找出现有的答案,但没有得到这种情况的答案。
我做了什么:
将数组的引用分配给变量,修改引用的值。但是原始数组没有被修改。
下面是我想要实现的演示代码。
let obj = {
innerObj1: {
arr: [2,3,4,5,6]
}
}
var ref = obj.innerObj1.arr;
console.log(ref);
// output [2,3,4,5,6]
ref = ref.filter(n => n%2 == 0);
console.log(ref);
// output [2,4,6]
//Original obj
console.log(obj.innerObj1.arr)
// output [2,3,4,5,6]
只需访问 ref
中的特定索引:
let obj = {
innerObj1: {
arr: [2, 3, 4, 5, 6]
}
}
const ref = obj.innerObj1.arr;
console.log(ref);
// output [2, 3, 4, 5, 6]
for(let i = 0; i < ref.length; i++) {
ref[i] = ref[i] % 2 == 0;
}
// Original obj
console.log(obj.innerObj1.arr)
// output [true, false, true, false, true]
当我们
var ref = obj.innerObj1.arr;
我们有一个指针指向 obj.innerObj1.arr
当我们做 ref.filter(n => n%2 == 0);
时,ref
是对数组的引用
为了得到我们想要的,我们必须做
obj.innerObj1.arr = ref.filter(n => n%2 == 0);
这是因为 filter
方法 returns 一个新数组,而您正在用新值覆盖它。
如前所述,它创建了一个新数组,这意味着 ref
变量不再引用旧数组。它指的是通过 filter
方法创建的新数组。
您可以简单地使用 for、while 或 do while 循环来解决您的这个问题。
希望对您有所帮助。请在此处找到工作示例:
let obj = {
innerObj1: {
arr: [2,3,4,5,6]
}
}
var ref = obj.innerObj1.arr;
console.log(ref);
// output [2,3,4,5,6]
for(let index=0; index < ref.length; index++) {
if(ref[index] % 2 === 0) {
ref[index] = ref[index]
} else{
ref.splice(index,1);
}
}
console.log(ref);
// output [2,4,6]
//Original obj
console.log(obj.innerObj1.arr)
// output [2,3,4,5,6]
为了我的工作,我需要访问嵌套对象数组。我不想每次都使用完整路径访问它。所以我想通过将实际引用分配给变量来缩短引用。
我试图找出现有的答案,但没有得到这种情况的答案。
我做了什么: 将数组的引用分配给变量,修改引用的值。但是原始数组没有被修改。
下面是我想要实现的演示代码。
let obj = {
innerObj1: {
arr: [2,3,4,5,6]
}
}
var ref = obj.innerObj1.arr;
console.log(ref);
// output [2,3,4,5,6]
ref = ref.filter(n => n%2 == 0);
console.log(ref);
// output [2,4,6]
//Original obj
console.log(obj.innerObj1.arr)
// output [2,3,4,5,6]
只需访问 ref
中的特定索引:
let obj = {
innerObj1: {
arr: [2, 3, 4, 5, 6]
}
}
const ref = obj.innerObj1.arr;
console.log(ref);
// output [2, 3, 4, 5, 6]
for(let i = 0; i < ref.length; i++) {
ref[i] = ref[i] % 2 == 0;
}
// Original obj
console.log(obj.innerObj1.arr)
// output [true, false, true, false, true]
当我们
var ref = obj.innerObj1.arr;
我们有一个指针指向 obj.innerObj1.arr
当我们做 ref.filter(n => n%2 == 0);
ref
是对数组的引用
为了得到我们想要的,我们必须做
obj.innerObj1.arr = ref.filter(n => n%2 == 0);
这是因为 filter
方法 returns 一个新数组,而您正在用新值覆盖它。
如前所述,它创建了一个新数组,这意味着 ref
变量不再引用旧数组。它指的是通过 filter
方法创建的新数组。
您可以简单地使用 for、while 或 do while 循环来解决您的这个问题。
希望对您有所帮助。请在此处找到工作示例:
let obj = {
innerObj1: {
arr: [2,3,4,5,6]
}
}
var ref = obj.innerObj1.arr;
console.log(ref);
// output [2,3,4,5,6]
for(let index=0; index < ref.length; index++) {
if(ref[index] % 2 === 0) {
ref[index] = ref[index]
} else{
ref.splice(index,1);
}
}
console.log(ref);
// output [2,4,6]
//Original obj
console.log(obj.innerObj1.arr)
// output [2,3,4,5,6]