【问题标题】:When command line order matters?什么时候命令行顺序很重要?
【发布时间】:2016-11-27 01:24:51
【问题描述】:

我是编码新手,如果我使用了错误的术语,我深表歉意(请纠正我)。我正在做以下编码挑战:给定一个具有多个值的数组,编写一个函数,该函数返回一个新数组,该数组仅包含原始数组的最大值、最小值和平均值。

这是我第一次尝试时想出的代码: First attempt

最终我通过反复试验发现问题出在我的 arrnew 变量的位置。我还修复了平均表达式,正确的算法是:Correct algorithm

我假设由于 max、min 和 avg 正在发生变化(有没有更好的术语?),var arrnew 会获取这些新值,但显然情况并非如此。我想我的问题是线路顺序什么时候重要?或者更具体地说,是否有任何我应该知道的简单规则或原则来帮助我更好地理解命令行编码(我不知道这是否称为命令行编码)。

谢谢

【问题讨论】:

  • 您的解决方案很好,但不确定您问的是什么。
  • 命令行和JavaScript有什么关系? JavaScript 在浏览器中,命令行在机器上。数组是使用这些初始值创建的,并且不会随着数组中的值的变化而变化。
  • @AndrewL。他们不知道正确的术语,所以只是尝试猜测。 (请参阅问题中的最后一条语句)
  • @zerkms 指出 OP,以便他/她可以适当地编辑
  • 在堆栈溢出时,必须将与问题相关的代码复制到问题本身中,而不仅仅是通过外部链接获得。这是因为外部链接往往会发生变化或停止工作,从而使问题无法作为未来读者的参考。

标签: javascript algorithm command-line


【解决方案1】:

因为编译器的原因,编译器总是从上到下,所以总是尽量把你的代码结构化。

【讨论】:

  • 好的,除非有更改变量值的操作,否则编译器不会重新编译任何内容。谢谢
【解决方案2】:

当你这样做时:

var arrnew = [max, min, avg];

这会将maxminavg 的内容的副本放入数组中。未来对 maxminavg 所包含内容的更改不会以任何方式影响数组。

所以,如果你这样做了;

var max = 3, min = 1, avg = 2;
var arrnew = [max, min, avg];    // 3, 1, 2
max = 5;
console.log(arrnew);             // 3, 1, 2

请注意,arrnew 的内容不会受到后续更改 maxminavg 所含内容的影响。这就是 Javascript(和大多数语言的工作原理)的方式。

【讨论】:

  • 好的,这就是我要找的。所以大多数语言不会重新编译(这是正确的词吗?)对变量的更改?例如,一旦记录了值(例如 arrnew),对 max、min、avg 的任何后续更改都不会覆盖原始值,因为它已经“锁定”了?
  • @Dinamo788 - 一般来说,语言都有赋值和引用/指针。赋值将一个值从一个地方复制到另一个地方,一旦它被复制,它就是它自己的数据副本——完全独立于原始数据。这就是你在这里所做的。
  • @Dinamo788 - 如果你想了解更多关于这个概念的一般信息,你可以阅读这个Do objects pushed into an array in javascript deep or shallow copy?Javascript by reference vs. by value
  • 我一直在研究深拷贝与浅拷贝,虽然它仍然有点令人困惑,但我的例子是深拷贝之一吗?因为 max/min/avg 值被复制到 arrnew 的新目的地,因此在更改原始值时不会更改?如果这作为浅拷贝操作,那么行顺序是否无关紧要,因为 arrnew 将引用 max/min/avg 的原始目标?是不是所有的js都是在深拷贝的基础上运行的还是我怎么知道的?
  • @Dinamo788 - 您的示例只是一个简单的变量赋值。我什至不会称它为浅拷贝。深浅复制是指在Javascript中对数组或对象进行复制。深拷贝甚至递归地复制嵌入的对象,而浅拷贝只是分配(而不是复制)嵌入的对象。深拷贝或浅拷贝都无法解决此类问题。
猜你喜欢
  • 2021-03-26
  • 2013-05-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-03
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
相关资源
最近更新 更多