我有一个对象数组,它们(序列)以javascript格式存储为数组
array = [A,G,G,A,G,A,A,G,G,G,A,A,G,G]
如何设计算法并在javascript中实现,以便它们转到位置,如下图所示。
说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')
答案 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, G, G], [A, G], [A],[A, G, G, G] [A] [A, G, G]]
等等。
答案 3 :(得分:1)
您可以使用Array#reduce
返回插入'A'
后面字母的最后一个数组fopr。
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;