如何在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 获取元素?

如何在浏览器中通过 Javascript 压缩图像?

如何在joomla模块中通过javascript发送输入文件类型

我将如何在 Javascript 中通过 WebSocket 发送和接收数据包