繁体   English   中英

forEach 循环没有根据需要更新数组

[英]forEach loop not updating array as desired

我正在尝试遍历 consoleOuputParamsOBJ 并更新我的 taskparamscompiled 对象列表中的记录

所需 Output

    {
    "process00x00": {
        "-i": "D:\\Code\\UnitTest\\ConsoleApp\\1\\00x00.png",
        "-tr": 16,
        "-tc": 16,
        "-ofr": 16,
        "-ofc": 16,
        "-outfile": "\"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1\""
    },
    "process00x01": {
        "-i": "D:\\Code\\UnitTest\\ConsoleApp\\1\\00x01.png",
        "-tr": 16,
        "-tc": 16,
        "-ofr": 16,
        "-ofc": 16,
        "-outfile": "\"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1\""
    },
    "process00x02": {
        "-i": "D:\\Code\\UnitTest\\ConsoleApp\\1\\00x02.png",
        "-tr": 16,
        "-tc": 16,
        "-ofr": 16,
        "-ofc": 16,
        "-outfile": "\"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1\""
    }

我目前正在做的是,processname 似乎正在工作,因为它正在更新该值,但它用来更新它的数据只是来自 taskparamscompiled 数据集的最后一条记录。

当前代码更新:

 var consoleOutputParamsOBJ = [{ name: '00x00', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x00.png' }, { name: '00x01', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x01.png' }, { name: '00x02', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x02.png' }, { name: '01x00', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\01x00.png' }, { name: '01x01', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\01x01.png' }, { name: '01x02', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\01x02.png' } ] var taskparamscompiled = { haralick_process00x00: { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' }, haralick_process00x01: { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' }, haralick_process00x02: { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' }, haralick_process01x00: { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' }, haralick_process01x01: { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' }, haralick_process01x02: { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' } } var dynamicTaskParamsBaseOBJ = { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\HaralickProcess\\1"' } var dynamicTaskNameBaseOBJ = 'haralick_process' var taskparamscompiled = consoleOutputParamsOBJ.reduce( (accumulator, elem) => { const taskname = dynamicTaskNameBaseOBJ + elem.name; return {...accumulator, [taskname]: dynamicTaskParamsBaseOBJ, }; }, {} ); consoleOutputParamsOBJ.forEach((obj) => { var processname = dynamicTaskNameBaseOBJ + obj.name; filepath = obj.filepath; taskparamscompiled[processname]['-i'] = filepath; }); console.log('consoleOutputParamsOBJ::', consoleOutputParamsOBJ, ' \n taskparamscompiled::', taskparamscompiled);

这是问题中提供的代码的最小版本。 它按预期工作。

 const outputParams = [ { name: '00x00', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x00.png', }, { name: '00x01', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x01.png', }, { name: '00x02', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x02.png', }, ]; const taskparamscompiled = { process00x00: {}, process00x01: {}, process00x02: {} }; const dynamicTaskNameBaseOBJ = 'process'; outputParams.forEach((obj) => { var processname = dynamicTaskNameBaseOBJ + obj.name; filepath = obj.filepath; taskparamscompiled[processname]['-i'] = filepath; }); console.log('taskparamscompiled:', taskparamscompiled);

请注意, filepath没有声明,它是多余的。 但这不会导致报告的问题:

它正在用记录的最后一个实例更新所有记录

由于提供的代码可以正常工作,所以问题一定出在某些未提供的代码上。

出现问题是因为您将相同 object 的副本分配给使用此行编译的taskparamscompiled中的每个键:

[taskname]: dynamicTaskParamsBaseOBJ

您需要复制 object,您可以使用Object.assign来完成。 您可以在构建taskparamscompiled object 的同时使用它来更新输入文件名( -i属性):

 const consoleOutputParamsOBJ = [{ name: '00x00', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x00.png' }, { name: '00x01', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x01.png' }, { name: '00x02', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\00x02.png' }, { name: '01x00', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\01x00.png' }, { name: '01x01', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\01x01.png' }, { name: '01x02', filepath: 'D:\\Code\\UnitTest\\ConsoleApp\\1\\01x02.png' } ] const dynamicTaskParamsBaseOBJ = { '-i': '', '-tr': 16, '-tc': 16, '-ofr': 16, '-ofc': 16, '-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\HaralickProcess\\1"' } const dynamicTaskNameBaseOBJ = 'haralick_process' const taskparamscompiled = consoleOutputParamsOBJ.reduce( (accumulator, elem) => { const taskname = dynamicTaskNameBaseOBJ + elem.name; return {...accumulator, [taskname]: Object.assign({}, dynamicTaskParamsBaseOBJ, { '-i': elem.filepath }) }; }, {} ); console.log(taskparamscompiled);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM