gpt4 book ai didi

javascript - JSON 对象在 JavaScript 函数中被覆盖

转载 作者:行者123 更新时间:2023-12-03 06:45:18 27 4
gpt4 key购买 nike

我正在尝试将我的简历复制到另一个对象中,并将其更改为希腊语(以查看我的 html 布局的外观)。我的问题是,当我通过该函数传递我的简历时,它会以某种方式在函数之外更改为希腊语。任何帮助,将不胜感激。我更改了简历上的信息,但格式是一样的。我们不允许使用任何其他 JS 库。该函数是greekingResume()。这是代码:

<script>
let resume = {
"personalInfo": {
"firstName": "Bob",
"lastName": Ross",
"contactInfo": {
"address": {
"city": "Somewhere",
"state": "USA"
},
"phoneNumber": "454-555-5555",
"email": "somedude@gsomeemail.com"
}
},
"education": {
"degree": "Bachelors of Computer Science",
"gradDate": "May 2018",
"schoolInfo": {
"school": "Some University",
"city": "Somewhere",
"state": "USA",
"relatedCourses": {
"programming": [
"Fundamentals of Programming",
"Object Oriented Programming",
"Operating Systems Theory",
"C++ Software Development",
"Patterns of Software Development"
],
"computerScience": [
"Discrete Structures",
"Introduction to Algorithms and Data Structures",
"Computer Networks",
"Computer Organization and Architecture",
"Introduction to Algorithms",
"Database Theory",
"Introduction to Computation Theory"
]
}
}
},
"skills": [{
"title": "programming",
"skillSet": [
"Proficient with C++, C#, C. Familiar with Java, angularJS and HTML/CSS",
"Designed User Interface changes and applications using Java for a company's product, helped create software that uses an angularJS application to communicate and display data from a Jasper REST server",
"Designed a Virtual Machine that can use multithreading without the threading library, a Stack, a Graph, a Word Counting program, and more that all fit to professors specifications"
]
}, {
"title": "management",
"skillSet": [
"Supervise a team of nine employees: oversee daily tasks, shift assignments and area coverage",
"Coordinate between team members to increase productivity, identifying key strengths and abilities to match job tasks",
"Utilize time effectively to maintain a standard of duties, resulting in promotion to lead custodian over two buildings"
]
}, {
"title": "communication",
"skillSet": [
"Communicated between team members and manager to ensure project was on track",
"Provide feedback between managers and employees to ensure a standards of cleaning, employee performance, and other general information or instructions",
"Increased employee productivity by effectively relaying instructions, resulting in extra time to focus on ancillary work"
]
}, {
"title": "organization & training",
"skillSet": [
"Complete tasks in a timely manner and resolve unexpected issues quickly",
"Trained others on how to effectively complete tasks to streamline workflow",
"Quickly learns a new skill and adapt easily to change and improvement"
]
}],
"experience": [{
"title": "Software Developer",
"company": "Cool Current Company",
"workStartDate": "April 2016",
"workEndDate": "Present",
"location": {
"city": "Somewhere Else",
"state": "USA"
}
}, {
"title": "Software Developer",
"company": "SuperDuper Co",
"workStartDate": "March 2015",
"workEndDate": "December 2015",
"location": {
"city": "Nowhere",
"state": "USA"
}
}, {
"title": "Sandwich Artist",
"company": "Sandwich shop",
"workStartDate": "January 2015",
"workEndDate": "March 2015",
"location": {
"city": "Somewhere",
"state": "USA"
}
}, {
"title": "Lead Custodian",
"company": "Some University",
"workStartDate": "August 2011",
"workEndDate": "January 2015",
"location": {
"city": "Somewhere",
"state": "USA"
}
}]
};
let greekWords = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris at ex eu turpis lacinia dapibus. Mauris sed porttitor odio, id efficitur nisi. Proin vitae velit iaculis, posuere ante vel, venenatis sem. Integer lorem nulla, tempor id nibh eget, faucibus finibus ante. Pellentesque tempus dictum sapien, quis vulputate enim pharetra sit amet. Nullam nibh lorem, aliquet et ullamcorper in, commodo eget nibh. Suspendisse condimentum massa vel ex varius, a finibus risus rutrum. Vivamus interdum vulputate est, sit amet viverra nisi mattis vitae. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Morbi vel posuere elit, et sagittis ex. Phasellus dictum eu urna tristique porta. Suspendisse efficitur, diam sed porttitor auctor, augue ipsum cursus mi, nec congue neque elit in nisl. Ut a ipsum bibendum, auctor lectus et, feugiat augue. Suspendisse sit amet nulla dapibus, euismod nunc sed, pretium libero. Aenean maximus elit sed lacus accumsan, et ullamcorper ante hendrerit. Aliquam accumsan nunc nulla, non ornare leo semper sed. Etiam tristique scelerisque tincidunt. Nullam venenatis congue mollis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Integer neque diam, pulvinar eget accumsan in, hendrerit vel dolor. Suspendisse maximus fringilla ultricies. Donec ac maximus augue. Etiam neque ligula, aliquam eu ligula vel, malesuada sodales lorem. Aenean orci augue, pulvinar sed sodales nec, maximus sit amet ex. Mauris rutrum augue eu magna finibus facilisis. Duis vel ligula enim. Nam non augue orci. Nullam facilisis, nibh eget lacinia dapibus, sem nisl tempus nisi, non consectetur ligula mauris et felis. Suspendisse potenti. Integer convallis ullamcorper molestie. Maecenas sit amet tincidunt velit, nec accumsan erat. Nam at scelerisque augue. Phasellus porta lectus vitae nisi aliquam, quis laoreet tellus tristique. Duis vehicula odio a velit commodo tempus. Duis condimentum, lectus sed tempor imperdiet, velit sem vulputate arcu, et pretium enim ante vitae lorem. Aenean ut hendrerit augue. Fusce ultricies posuere nisi. Pellentesque nec turpis nisi. Nulla sodales feugiat arcu eget ultrices. Cras sem velit, maximus ut neque in, scelerisque cursus mauris. Pellentesque mauris lectus, congue non erat vel, dictum commodo diam. Cras sed augue nec ipsum convallis dignissim at et risus. Fusce condimentum placerat porttitor. Vestibulum ante ante, tincidunt at tristique eget, suscipit quis ipsum. Vivamus iaculis euismod libero id laoreet. Quisque leo felis, placerat sit amet placerat at, sodales in quam. Nunc vulputate, sapien id commodo fringilla, ex ante laoreet nunc, in mattis diam magna ut sapien. Pellentesque scelerisque tortor justo, ut venenatis nibh malesuada nec. Donec non commodo magna, sed posuere magna. Morbi imperdiet nisl non luctus rhoncus. Phasellus id mi sed tellus dignissim efficitur accumsan quis ex. Interdum et malesuada fames ac ante ipsum primis in faucibus. Fusce sed scelerisque tellus, a aliquam leo. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras sed dolor at augue vehicula rhoncus. Sed ultrices, quam eget faucibus placerat, nulla dui imperdiet urna, vel suscipit dui ex vitae quam. Maecenas magna ligula, vulputate sed purus nec, laoreet tempor massa. Ut eu purus vulputate, faucibus tellus sed, accumsan massa. Sed vestibulum eleifend risus, sed tempus sem varius at. Praesent viverra vel urna vel luctus. Morbi dui ipsum, semper vitae congue quis, vulputate id quam. Donec quis gravida purus.";

function greekingResume(data, greekWords) {
let greekObj = {
arr: greekWords.split(/[^A-Za-z]+/),
index: 0
};
function greekHelper(obj, greekObj) {
for (let property in obj) {
if (typeof(obj[property]) === "object") {
obj[property] = greekHelper(obj[property], greekObj);
} else {
obj[property] = obj[property].replace(/[A-Za-z]+/g, (function() {
return function(matching) {
let greekWord = greekObj.arr[greekObj.index++ % greekObj.arr.length];
if (matching[0].match(/[A-Z]/)) {
if (matching[1] && matching[1].match(/[A-Z]/)) {
greekWord = greekWord.toUpperCase();
} else {
greekWord = greekWord[0].toUpperCase() + greekWord.slice(1);
}
}
return greekWord;
};
}()));
}
}
return obj;
}
return greekHelper(data, greekObj);
}
let greekedResume = greekingResume(resume, greekWords);

感谢您花时间查看此内容!

最佳答案

编辑:

好吧,现在我测试了你的脚本,resume 也被更改的原因是因为在 javascript 中将变量传递给函数已经为传递的参数“分配”了一个新值,只是就像您使用等号 (=) 一样。发生的事情是这样的:

resume = obj//您的 greekHelper 函数内的 obj

您的简历正是在这些行上发生了变化:

obj[属性] = greekHelper(obj[属性], greekObj);

obj[属性] = obj[属性].replace(/[A-Za-z]+/g, (function() {

因此,为了避免这种情况,请更改代码的这一部分以添加 newObj 并将变异值分配给新对象并返回该 newObj:

        var newObj = {};
for (let property in obj) {

if (typeof(obj[property]) === "object") {
newObj[property] = greekHelper(obj[property], greekObj);
} else {
newObj[property] = obj[property].replace(/[A-Za-z]+/g, (function() {

这是一个适合您的 fiddle http://jsbin.com/rotuhap/edit?js,console,output

这里有一篇值得您阅读的文章:Is JavaScript a pass-by-reference or pass-by-value language?

忽略:您可以将 letresume 更改为 varresumeresume 也已更新,因为您使用了 let , let 绑定(bind)新值而不是保留旧的引用值。

这里有一篇关于 letvar 的好文章:

<删除> “let” keyword vs “var” keyword

有关使用 let 的更多信息,请查看 let 的文档

关于javascript - JSON 对象在 JavaScript 函数中被覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37765225/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com