今天朋友问我一道题,将 "kuai-shou-gong-cheng" 转化为 "KuaiShouGongCheng" 。我想着挺简单的,将字符串分割之后再使用 forEach 将分割后得到的数组的每个字符串的首字母大写,最后 join 即可。
但是问题就来了,我发现在 forEach 里面无论怎么改变 item ,最后原数组都不会被改变。
那么下面我们就来搞清楚一下这个问题。
先说结论:
①当要改变的数组中的某个值是 引用类型 时,就可以直接改变,如:
let arr = [1, "1", { a: 1 }];
arr.forEach(item => {
if (typeof item === "object") {
item.a = 2;
}
});
console.log("arr:", arr);
// [1, "1", { a: 2 }]
②当要改变的值是 基本类型 时,无法直接改变,如:
let arr = [1, "1", { a: 1 }];
arr.forEach(item => {
if (typeof item !== "object") {
item = 2;
}
});
console.log("arr:", arr);
// [1, "1"