.split(“,”)每4个项目一次?

时间:2014-11-17 20:35:58

标签: javascript

我开始使用字符串:

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 ProjectResults

再一次,不要介意我的格式化,我在这里粘贴东西有困难:

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>";
}
}

5 个答案:

答案 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);
}