javascript - JavaSript:为什么我的代码要修改原始数据对象上的对象数组?
问题描述
我有这段代码应该避免修改原始数据对象“信息”对象数组,但它确实如此!尽管它正在处理这个数组的副本?!我需要保持原始数据对象不变,否则每次调用函数时我都会不断修改数据对象,就好像它们链接在一起一样?!
const data = {
owner: "John Doe",
info: [
{
employeeId: 123000456,
firstName: "Alex",
lastName: "Mckenna",
email: "alex@work.org",
salary: 48000,
department: "Art and Media",
},
{
employeeId: 123000777,
firstName: "Devon",
lastName: "Foley",
email: "devon@work.org",
salary: 75000,
department: "Advertising",
},
{
employeeId: 123000894,
firstName: "Riley",
lastName: "Couch",
email: "riley@work.org",
salary: 33000,
department: "Shipping",
},
{
employeeId: 123000533,
firstName: "Cara",
lastName: "Eramchuk",
email: "cara@work.org",
salary: 39000,
department: "Accounting",
},
{
employeeId: 123000721,
firstName: "Cole",
lastName: "Tilbury",
email: "cole@work.org",
salary: 43000,
department: "Accounting",
},
{
employeeId: 123000832,
firstName: "Bree",
lastName: "Northam",
email: "bree@work.org",
salary: 61000,
department: "Shipping",
},
{
employeeId: 123000271,
firstName: "Mark",
lastName: "Miller",
email: "mark@work.org",
salary: 55000,
department: "Sales",
},
{
employeeId: 123000442,
firstName: "Jenna",
lastName: "McEvoy",
email: "jenna@work.org",
salary: 40000,
department: "Sales",
},
],
};
const myCompany = {
renameProp(arr, old, neu) {
const modified = arr.map((obj) => {
if (old in obj) {
obj[neu] = obj[old];
delete obj[old];
return obj;
} else {
return `property, ${old}, doesn't exist for employee ${obj["firstName"]} ${obj["lastName"]}`;
}
});
return modified;
},
sortCopy(arr, prop) {
try {
const copied = Array.from(arr);
copied.sort((a, b) => {
if (typeof a[prop] === "string" && typeof b[prop] === "string") {
if (a[prop].toLowerCase() > b[prop].toLowerCase()) return 1;
else if (b[prop].toLowerCase() > a[prop].toLowerCase()) return -1;
else return 0;
} else {
if (a[prop] > b[prop]) return 1;
else if (b[prop] > a[prop]) return -1;
else return 0;
}
});
return copied;
} catch (err) {
return err.message;
}
},
};
console.log(myCompany.renameProp(data.info, "salary", "wage"));
console.log("\n\n", myCompany.renameProp(data.info, "firstName", "name"));
console.log("\n", "examples of second function: ", "\n");
console.log(
"sorted by employeeId: \n\n",
myCompany.sortCopy(data.info, "employeeId")
);
console.log(
"\n sorted by first name: \n\n",
myCompany.sortCopy(data.info, "firstName")
);
console.log("\n\n original array \n\n", data);
解决方案
推荐阅读
- indexing - 在 Acumatica 中恢复快照会禁用某些索引
- android - 安卓。活动暂停或完成后如何停止活动中的所有侦听器?(无侦听器参考)
- c++ - 将字符串分配给类的实例(重载 = )?
- javascript - 通过 javascript 处理特定的图像响应
- html - HTML表格,标题是属性列标识符吗?
- python-2.7 - For 循环失败,但代码似乎是正确的
- bash - Bash 脚本案例无法正确评估条件
- google-chrome - Chrome 69.0.3497.100 中的 CORS 问题
- powershell - Powershell 脚本 - 使用 InterfaceDescription 更改 IP
- scala - 将列附加到 HDFS 中的现有 CSV 文件