不同的console.log行为

时间:2018-12-26 11:04:04

标签: javascript

我有一个名为结果的数组。结果包含名称和计数元素。我只想将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)的行中放置断点来运行同一程序时,结果与预期的一样

为什么会这样?

0 个答案:

没有答案