[英]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.