我开始使用字符串:
hidden = "a,b,c,d,e,f,g,h";
然后我将字符串拆分为(",")我可以尝试使用的字符串:
array = hidden.split(",");
如果我将console.log输出,结果是:
["a", "b", "c", "d", "e", "f", "g", "h"]
我最终想要结果(仅使用JS)是:
["a,b,c,d","e,f,g,h"];
或
[["a,b,c,d"],["e,f,g,h"]];
谢谢!
编辑以表明我实际上是想弄清楚这一点(不要介意格式化):
if (currentPage === "view-bills.php")
{
var str = "";
hidden = document.getElementById("billItems");
array = hidden.value.split(",");
for (var i=0;i<array.length;i++)
{
str += "<option>"+ array[i] +"</option>";
}
var itemsAmt = document.getElementById("items").value;
document.getElementById("displayItems").innerHTML = "<optgroup label='"+ itemsAmt +" items'>" + str + "</optgroup>";
}
更新
问题已经解决,但是,我想向您展示我的项目的结果(这次访问类而不是id):
http://i.imgur.com/umjhGPP.png
再一次,不要介意我的格式化,我在这里粘贴东西有困难:
if (currentPage === "view-bills.php")
{
// Add items to select box
hidden = document.getElementsByClassName("billItems");
for (var n=0;n<hidden.length;n++)
{
array = hidden[n].value.split(",");
groups = [];
for(var i=0;i<array.length;i+=5)
{
groups.push(array.slice(i,i+5).join(','))
}
var str = "";
for (var j=0;j<groups.length;j++)
{
str += "<option>"+ groups[j] +"</option>";
}
var itemsAmt = document.getElementsByClassName("items")[n].value;
document.getElementsByClassName("displayItems")[n].innerHTML = "<optgroup label='"+ itemsAmt +" items'>" + str + "</optgroup>";
}
}
答案 0 :(得分:4)
您可以使用正则表达式:
var hidden = "aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii";
console.log(hidden.match(/(([^,]+,){0,3}[^,]+)/g));
<强>输出强>
["aaa,bbb,ccc,ddd", "eee,fff,ggg,hhh", "iii"]
请参阅jsFiddle
答案 1 :(得分:1)
使用简单循环的另一种方法;
hidden = "a,b,c,d,e,f,g";
arr = hidden.split(",");
groups = []
for(var i = 0; i < arr.length; i+=4)
groups.push(arr.slice(i,i+4).join(','))
console.log(groups)
> [ 'a,b,c,d', 'e,f,g' ]
答案 2 :(得分:0)
此代码采用数据的拆分版本,然后将其分组为4个。
如果最后一组中没有正好四个项目,则会在for循环后添加它。
您可以通过将join
逻辑提取到一个简单的函数中来减少重复,这样您就不会重复代码(例如,如果您想要使用其他字符加入,则必须更改这两行)。我保持这个例子非常程序化,所以你可以得到一般的想法。
var hidden = "a,b,c,d,e,f,g,h";
var allItems = hidden.split(',');
var groups = [];
var currentGroup = [];
for (var i = 0; i < allItems.length; i++) {
currentGroup.push(allItems[i]);
if (currentGroup.length === 4) {
groups.push(currentGroup.join(','));
currentGroup = [];
}
}
if (currentGroup.length > 0) {
groups.push(currentGroup.join(','));
}
console.log(groups);
结果:
[ "a,b,c,d", "e,f,g,h" ]
答案 3 :(得分:0)
你可以通过减少例如via lodash:
return _.reduce(hidden.split(','), function(result, value, key) {
if(key % 4 === 0) result.push("");
result[result.length - 1] += value;
return result;
}, []);
我认为这是关于你能找到的最简单的解决方案,考虑到每一步的必要性。
答案 4 :(得分:-3)
到目前为止,我发现了一个明显的循环:
var array = hidden.split(",");
var result = [];
for(var i = 0; i + 3 < array.length; i += 3) {
result.push("" + array[i] + array[i+1] + array[i+2] + array[i+3]) + ",";
}
if(i < array.length) {
var last = "";
for(; i < array.length; i++) {
last += array[i];
}
array.push(last);
}