如何修改对象数组:处理null值的current_result并补充not_tested属性
如何处理项目测试结果数组的空值与属性补充?
我来帮你搞定这个数组处理的需求!针对你给出的项目测试数据,我们可以用JavaScript的数组方法轻松实现需求,先明确核心要求:
- 当
current_result为null时,替换成包含success_percentage:0、failure_percentage:0、skip_percentage:0和not_tested:100的对象 - 当
current_result不为null时,给它新增not_tested:0的属性
方案一:返回新数组(不修改原数据)
这种方式会生成一个全新的结果数组,原始数据保持不变,适合需要保留原始数据的场景:
const data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: null, } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } }, { name: "Charlie", id: 47, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } } ] } ]; const result = data.map(vertical => ({ ...vertical, projects: vertical.projects.map(project => { let currentResult; if (project.current_result === null) { currentResult = { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100 }; } else { // 复制原对象并新增属性,避免污染原数据 currentResult = { ...project.current_result, not_tested: 0 }; } return { ...project, current_result: currentResult }; }) })); console.log(result);
方案二:直接修改原数组
如果不需要保留原始数据,这种方式更节省内存,直接在原数组上修改:
const data = [ { vertical_name: "CORE", projects: [ { name: "Alpha", id: 187, current_result: null, } ] }, { vertical_name: "release", projects: [ { name: "Beta", id: 27, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } }, { name: "Charlie", id: 47, current_result: { success_percentage: 37, failure_percentage: 25, skip_percentage: 36 } } ] } ]; data.forEach(vertical => { vertical.projects.forEach(project => { if (project.current_result === null) { project.current_result = { success_percentage: 0, failure_percentage: 0, skip_percentage: 0, not_tested: 100 }; } else { project.current_result.not_tested = 0; } }); }); // 此时data已经是处理后的结果 console.log(data);
代码思路说明
- 外层遍历每个业务线(
vertical)对象,针对每个业务线的projects数组做内层处理 - 内层遍历每个项目(
project)对象:- 判断
current_result是否为null,是则替换为指定的默认对象 - 非空则补充
not_tested:0属性(方案一用对象展开复制,方案二直接修改原属性)
- 判断
内容的提问来源于stack exchange,提问作者Aren Trot
相关产品推荐
相关产品推荐

