我有一个名为结果的数组。结果包含名称和计数元素。我只想将map对象设置为name和result的键值,为此我使用forEach在数组中循环。
在循环过程中,它将检查map对象中是否存在带有结果名称的键。如果找不到键,则为新对象分配结果名称作为键,并将计数设置为零。 这样做时,我尝试使用console.log检查输出。当我在console.log中传递字符串时,输出是预期的,但是当res对象在console.log中传递时,最终结果显示在每个循环迭代中
$phpWord = IOFactory::createReader('Word2007')->load($request->file('add_file')->path());
$text = [];
foreach ($phpWord->getSections() as $section) {
foreach ($section->getElements() as $element) {
switch (get_class($element)) {
case 'PhpOffice\PhpWord\Element\Text' :
$text[] = $element->getText();
break;
case 'PhpOffice\PhpWord\Element\TextRun':
$textRunElements = $element->getElements();
foreach ($textRunElements as $textRunElement) {
$text[] = $textRunElement->getText();
}
break;
case 'PhpOffice\PhpWord\Element\TextBreak':
$text[] = " ";
break;
default:
throw new Exception('Something went wrong...');
}
}
}
这是我的结果。我们可以看到,res对象对于每个a1和a2都打印相同。但是计数是不同的。
function init() {
let results = [
{ name: 'a1', count: 2 },
{ name: 'a1', count: 3 },
{ name: 'a1', count: 4 },
{ name: 'a2', count: 5 },
{ name: 'a2', count: 6 },
];
/*
This holds the result name as key
*/
let map = {};
/*
Loop throught the result
*/
results.forEach(result => {
let res = null
if (typeof map[result.name] === 'undefined') {
res = { name: result.name, count: 0 }
map[result.name] = res
console.log(`${res.name} not found new count : ${res.count}`)
console.log({ res })
} else {
res = map[result.name]
console.log(`${res.name} found count : ${res.count}`)
console.log({ res })
}
addCount(result, res)
}); // foreach ends
console.log({ map })
function addCount(result, res) {
res.count += result.count
}
}
init();
我期望的是res的数量可以打印出来,就像在console.log中打印为字符串一样。
当我通过在代码为addCount(result,res)的行中放置断点来运行同一程序时,结果与预期的一样
为什么会这样?