如何在JavaScript中通过加工一些值来更新第一对象和第二对象。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JavaScript中通过加工一些值来更新第一对象和第二对象。相关的知识,希望对你有一定的参考价值。
我有两个对象 - listOfStudents 和 家庭作业结果. 我需要更新 listOfStudents 使用匹配的对象 电子邮件.所以我需要以某种方式来比较这两个对象和。电子邮件 等于--得到 课题 和 成功 并更新 listOfStudents.目标是只使用javascript。
接下来应该是结果。
name: 'John',
email: 'john@gmail.com',
results: [
topic: 'html Basics',
success: true
,
topic: 'CSS Basics',
success: false
]
const listOfStudents = [
name: 'John',
email: 'john@gmail.com'
,
name: 'Jane',
email: 'jane@gmail.com'
];
const homeworkResults = [
topic: 'HTML Basics',
results: [
email: 'john@gmail.com',
success: true
,
email: 'jane@gmail.com',
success: true
]
,
topic: 'CSS Basics',
results: [
email: 'john@gmail.com',
success: false
,
email: 'jane@gmail.com',
success: true
]
];
答案
使用 map
关于 listOfStudents
. 在创建 results
使用 reduce
关于 homeworkResults. Inside the callback use
找到to find the object where the email matches. Then from that object take the
和主题
const listOfStudents = [
name: 'John',
email: 'john@gmail.com'
,
name: 'Jane',
email: 'jane@gmail.com'
];
const homeworkResults = [
topic: 'HTML Basics',
results: [
email: 'john@gmail.com',
success: true
,
email: 'jane@gmail.com',
success: true
]
,
topic: 'CSS Basics',
results: [
email: 'john@gmail.com',
success: false
,
email: 'jane@gmail.com',
success: true
]
];
// map will give an array
let data = listOfStudents.map((item, index) =>
return
name: item.name,
email: item.email,
// inside reduce callback use find to get the object where
// the id matches. If id match then get the topic and success
results: homeworkResults.reduce((acc, curr) =>
const resultByEmail = curr.results.find(elem => elem.email === item.email);
acc.push(
topics: curr.topic,
success: resultByEmail.success
)
return acc;
, [])
);
console.log(data)
另一答案
for (let i = 0, i < listOfStudents.length ; i++ )
var homeworksForSpecificStudent = homeworkResults.results.filter(x=> x.email == listOfStudents[i].email);
// homeworksForSpecificStudent will be an array with all homeworks with matching emails
// do you operation to modify elements of the list
另一答案
我在这里绘制 listOfStudent
而在该映射中 homeworkResult
并从中得到过滤和修改后的数据。
var listOfStudents = [ name: 'John', email: 'john@gmail.com' , name: 'Jane', email: 'jane@gmail.com' ];
var homeworkResults = [ topic: 'HTML Basics', results: [ email: 'john@gmail.com', success: true , email: 'jane@gmail.com', success: true ] , topic: 'CSS Basics', results: [ email: 'john@gmail.com', success: false , email: 'jane@gmail.com', success: true ] ];
var result = listOfStudents.map(val=>
result = homeworkResults.map((topic, results)=>(topic,...results.filter(v=>v.email==val.email).map(d=>(success:d.success))[0]));
return ...val, result
);
console.log(result);
以上是关于如何在JavaScript中通过加工一些值来更新第一对象和第二对象。的主要内容,如果未能解决你的问题,请参考以下文章
如何在 css 类名中使用 javascript 变量并在 Rails 中通过 jquery 获取 css 颜色名
通过在 JavaScript 中检索它们的值来自动选择复选框 [重复]
如何在 JavaScript 中通过 XPATH 获取元素?