【问题标题】:javascript syntax - rosetta code merge sortjavascript 语法 - 罗塞塔代码合并排序
【发布时间】:2013-09-27 18:50:22
【问题描述】:

rosettacode page 上用于归并排序的javaScript 示例具有以下功能:

1 function merge(left,right,arr){
2    var a=0;
3    while(left.length&&right.length)
4       arr[a++]=right[0]<left[0]?right.shift():left.shift();
5    while(left.length)arr[a++]=left.shift();
6    while(right.length)arr[a++]=right.shift();
7 }

谁能解释一下第 4 行发生了什么?

【问题讨论】:

  • 你到底有什么不明白的地方?尝试拆分为多行 / 将 ?: 替换为 if...
  • @AlexeiLevenkov 我不熟悉这种语法。有比较right[0]&lt;left[0],然后是 boolean 结果,其中? 被评估为true=right.shift():false=left.shift()。这是正确的吗?
  • 是的。 ?: 通常称为“三元运算符”(正式名称“条件运算符”) - 搜索并查看详细信息(在许多语言 JS、C、C++、C#、Java...中的行为相同)
  • 谢谢@AlexeiLevenkov,因为三个值(bool, condition1, condition2),它是三元的吗?
  • 是的 - 类似于二进制 (+,-, *,...) 和一元 ((-1) 中的一元“-”)。见Arity

标签: javascript syntax semantics mergesort


【解决方案1】:

arr 得到排序。如果left 中的第一个单元格大于right 中的第一个单元格,则 (?) right.shift() - 这意味着right 中的第一个单元格被删除并返回(推送到arr)否则(:)、left 转移。

【讨论】:

    猜你喜欢
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    相关资源
    最近更新 更多