【问题标题】:In Node.js short arrays handled differently than longer ones在 Node.js 中,短数组的处理方式与长数组不同
【发布时间】:2022-06-10 21:52:45
【问题描述】:

请注意处理 names 和 names2 的方式之间的区别。为什么我会得到这种差异?如何使名称表现得像 names2?

顺便说一句,我在 Firefox 中得到了相同的行为。

> names
[
  'Liam',     'Noah',
  'Oliver',   'Elijah',
  'William',  'James',
  'Benjamin', 'Lucas',
  'Olivia',   'Emma',
  'Ava',      'Charlotte',
  'Sophia',   'Amelia',
  'Isabella', 'Mia'
]
> names2
[ 'Noah', 'Oliver', 'Sophia', 'Mia' ]
> names .map((n)=>n+'\n') .reduce((x,y)=>x+y,'') 
'Liam\n' +
  'Noah\n' +
  'Oliver\n' +
  'Elijah\n' +
  'William\n' +
  'James\n' +
  'Benjamin\n' +
  'Lucas\n' +
  'Olivia\n' +
  'Emma\n' +
  'Ava\n' +
  'Charlotte\n' +
  'Sophia\n' +
  'Amelia\n' +
  'Isabella\n' +
  'Mia\n'
> names2 .map((n)=>n+'\n') .reduce((x,y)=>x+y,'') 
'Noah\nOliver\nSophia\nMia\n'
> 

【问题讨论】:

  • 这似乎只是 Node.js 显示结果以使事情更具可读性的方式。这会给您带来问题吗?你想做什么?
  • 是的,应该是一样的。另一个数组要大得多,所以控制台只是这样显示。

标签: javascript node.js arrays


【解决方案1】:

这就是字符串的显示长度。

例如,尝试在节点控制台中输入:

"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"

它会显示这个输出:

'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n' +
  'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'

【讨论】:

    【解决方案2】:

    我的问题的第一部分是重要的部分。我现在认为的答案是,这种行为是一些 Javascript 引擎中的一种优化,可以为大型数组提供 reduce 的惰性评估。

    第二个问题现在可以改写为“如何强制惰性求值以 console.log 的方式运行完成?”对此的答案会很有趣,但我不需要它,因为我能够编写自己的 reduce 函数。

    【讨论】:

    猜你喜欢
    • 2017-08-01
    • 2016-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    相关资源
    最近更新 更多