我正在尝试从arMin中删除最大值,并从arMax中删除最小值,但是arr(是一个const!)也会发生变化!我不知道为什么。我使用的是Google Chrome版本65.0.3325.181。 'arr'只宣告了一次,它不应该做任何事情。我无法理解。尝试删除,但它将数字转换为'空',但工作相同并改变常量! 这是我的第一篇文章,所以如果我做错了,请原谅我。
const arr = [1, 2, 3, 4, 5];
let arMin = arr;
let arMax = arr;
let min = arMin.indexOf(Math.min.apply(null, arMin));
let max = arMax.indexOf(Math.max.apply(null, arMax));
arMin.splice(max, 1);
arMax.splice(min, 1);
console.log(arMin); // [2,3,4]
console.log(arMax); // [2,3,4]
console.log(arr); // [2,3,4]
答案 0 :(得分:1)
arr
的值是对数组的引用。
你不能改变它。 总是是对该数组的引用。
但是数组是可变的,因此您可以更改数组中的值。 const
无法阻止这种情况。
如果您希望arMin
和arMax
成为不同的数组,那么您需要复制数组而不只是复制arr
的值(这是对{1}}的引用那个数组)。
答案 1 :(得分:0)
答案 2 :(得分:0)
要完成上一个答案,要制作数组的精确副本而不是复制引用,您应该执行以下操作:
const arr = [1, 2, 3, 4, 5];
let arMin = [...arr]; // We use spread operator to create new array from original one.
let arMax = [...arr];
let min = arMin.indexOf(Math.min.apply(null, arMin));
let max = arMax.indexOf(Math.max.apply(null, arMax));
arMin.splice(max, 1);
arMax.splice(min, 1);
console.log(arMin); // [1, 2, 3, 4]
console.log(arMax); // [2, 3, 4, 5]
console.log(arr); // [1, 2, 3, 4, 5]
---编辑1 ---
我使用TypeScript synthax来说明类型
const arr = [1, 2, 3, 4, 5];
arr.push(6); // Is allow.
const object: {id: number, title: string} = {id: 1, title: 'Yanis'};
object.id = 2; // Is allow.
const myString: string = 'yanis';
myString = 'Jackob'; // Not allow.
答案 3 :(得分:0)
当你创建数组const时,你不能改变引用
const arr = [1,2,3]
arr = [4,5,6] \\ Throws errors; You can not change const reference
arr[1] = 6; \\ Works fine. You are not changing the const reference. You are just mutating the array.
const x = 5; \\ Here constant is the value
x = x + 1; \\ Error. You can not change the constant value;
答案 4 :(得分:0)
作为常量,您无法重新分配其值,在这种情况下,它包含对数组的引用。
但阵列本身并不是一成不变的。
一个例子是:
const arr = [0,1,2,3,4,5];
arr = 'foo' // You cannot do that
arr.push(6) // That works fine. result: [0,1,2,3,4,5,6]