使用javascript数组排列文本

时间:2017-10-27 15:03:47

标签: javascript arrays algorithm tree

我有一个对象数组,它们(序列)以javascript格式存储为数组

array = [A,G,G,A,G,A,A,G,G,G,A,A,G,G]

如何设计算法并在javascript中实现,以便它们转到位置,如下图所示。

Image

说placeAtTop('A')将A放在顶部 比如placeAtBottom('G')将G放在底部

每当从左到右遇到A时,它应该转到placeAtTop(),每当解析G时,它应该是从左到右依次为placeAtBottom()。

修改

预期输出是函数调用

// create new page

placeAtTop('A')
placeAtBottom('G')
placeAtBottom('G')

// create new page

placeAtTop('A')
placeAtBottom('G')

// create new page

placeAtTop('A')

// create new page

placeAtTop('A')
placeAtBottom('G')
placeAtBottom('G')
placeAtBottom('G')

// create new page

placeAtTop('A')

// create new page

placeAtTop('A')
placeAtBottom('G')
placeAtBottom('G')

4 个答案:

答案 0 :(得分:3)

可能是使用正则表达式,捕获组,循环组,然后每组循环字母的选项。 第一个字母将是' A'其余的将是' G'

例如:



host dir c:\app




答案 1 :(得分:2)

您可以根据A创建数组数组,然后将它们添加到表中,其中每个第一个元素都为A,然后将它们添加到thead,其他元素为{{1然后将它们添加到G

tbody
var arr = ["A", "G", "G", "A", "G", "A", "A", "G", "G", "G", "A", "A", "G", "G"]

var i = 0
var r = arr.reduce(function(r, e, j) {
  if (e == 'A' && j != 0) i++;
  if (!r[i]) r[i] = []
  r[i].push(e)
  return r;
}, [])

var thead = document.querySelector('thead tr');
var tbody = document.querySelector('tbody tr');

r.forEach(function(e, i) {
  thead.innerHTML += '<th>' + e[0] + '</th>';
  tbody.innerHTML += '<td>' + e.slice(1).map(e => e + '<br>').join('') + '</td>';
})
td {border: 1px solid black;}

答案 2 :(得分:1)

步骤,算法:

  • 创建一个新数组,我们只需将其称为newArray,这将是二维的
  • 遍历第一个数组
    • 对于数组中的每个项目,如果是A,则创建一个新数组,将A推入其中,然后将其添加到newArray
    • 如果是G,请将其推送到newArray的最后一个subArray

这最终会得到一个看起来像

的数组
[[A, G, G], [A, G], [A],[A, G, G, G] [A] [A, G, G]] 

等等。

答案 3 :(得分:1)

您可以使用Array#reduce返回插入'A'后面字母的最后一个数组fopr。

&#13;
&#13;
var array = ['A', 'G', 'G', 'A', 'G', 'A', 'A', 'G', 'G', 'G', 'A', 'A', 'G', 'G'],
    result = [];
    
array.reduce(function (r, a) {
    if (a === 'A') {
        r = [a];
        result.push(r);
    } else {
        r.push(a);
    }
    return r;
}, null);

console.log(result);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;