将数组中的连续相同项混杂在一起,以使输出数组没有连续值。Java脚本

Kev*_*sti -2 javascript arrays sorting grouping

这个想法基本上是在数组中没有相似值的重复值。

示例数组包含值

input = [1,2,2,2,2,3,4,5,6,7,8,9]<br/>
Run Code Online (Sandbox Code Playgroud)

预期输出有一些东西

likeoutput = [1,2,3,2,4,2,5,2,6,2,7,8,9]<br/>
Run Code Online (Sandbox Code Playgroud)

我尝试将其放在for循环中,在其中检查下一项,如果相同,则交换值。问题是当我有连续的相似值时。

Nin*_*olz 5

该提案的特征

  • 计算元素并将其存储在适当的对象中,
  • 检查是否可以传播(例如,在这里不行[1, 1, 1, 1, 3, 3]),
  • 与元素轮循,所以
  • 同一元素之间的最大距离。

它是如何工作的?

作为示例,我采用以下数组: [1, 2, 2, 2, 2, 3, 4, 5, 6, 7, 8, 9]

  1. 使用元素数构建对象,然后将元素作为键存储。

    length = {
          "1": 1, "2": 4, "3": 1, "4": 1, "5": 1, "6": 1, "7": 1, "8": 1, "9": 1
      }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 选择具有最大值的属性: length[2] = 4
  3. 用先前值的长度创建一个新数组,并用空数组填充它。

    output = [[], [], [], [], []]
    
    Run Code Online (Sandbox Code Playgroud)
  4. 检查扩展数组是否可能。如果没有,请返回。
  5. 设置k为属性最大值的键。

    k = '2'
    
    Run Code Online (Sandbox Code Playgroud)
  6. 如果是,请继续。否则转到11。
  7. 设置l为的值length[k]。

    l = 4
    
    Run Code Online (Sandbox Code Playgroud)
  8. 遍历l并推入k索引为的数组末尾i % outputLength。增加i。
  9. 删除属性k。
  10. 继续5。
  11. 返回平面output数组。

    output   first  then continued
    array 0:     2     1     6
    array 1:     2     3     7
    array 2:     2     4     8
    array 3:     2     5     9
    
    return:      2  1  6  2  3  7  2  4  8  2  5  9
    distance     |        |        |        |       is equal  
    
    Run Code Online (Sandbox Code Playgroud)

length = {
      "1": 1, "2": 4, "3": 1, "4": 1, "5": 1, "6": 1, "7": 1, "8": 1, "9": 1
  }
Run Code Online (Sandbox Code Playgroud)
output = [[], [], [], [], []]
Run Code Online (Sandbox Code Playgroud)