【问题标题】:javascript output as semicolon in chunks of 50javascript 以 50 为单位的分号输出
【发布时间】:2014-11-19 10:24:23
【问题描述】:

我很困惑试图解决这个问题。

1) 我有一个 PHP 数组,它是 JSON_ENCODE 存储在 JS 数组1中。

2) 然后是一个文本区域,输入被分割成一个 JS 数组2。

3) 然后将数组和 Slice & Concat 与从 array1 中扣除的值进行比较。

4) 然后将 array2 分块为 50 的 arraySize。

我面临的问题是我需要 50 个块在每个块的末尾有一个分号分隔每个值和另一个。

我以前使用过连接,但是 ';'被添加到数组中,我的 arraySize 被搞砸了。

非常感谢任何帮助。

//Store PHP values.
var ci_sites = <?echo json_encode($ci_pass);?>;


function dobuild(){
//Store textarea input into Array, Duplicates Removed.
var text = $("textarea#builder").val();
var lines = text.split(/\r\n|\s+\n|\s+\r|\n+|\r+/g); 
var lines_arr = [];
    $.each(lines,function(index, item){
        if ($.inArray(item, lines_arr) ==-1)
            lines_arr.push(item);
    })

//Remove value from ci_sites.
var A1 = lines_arr;
var A2 = ci_sites;
for (var i = 0; i<A2.length; i++) {
    var arrlen = A1.length;
    for (var j = 0; j<arrlen; j++) {
        if (A2[i] == A1[j]) {
            A1 = A1.slice(0, j).concat(A1.slice(j+1, arrlen));
        }
    }
}

//Chunk The Array Into Sets Of 50.
var cleaned = A1;
var chunk = [];
var arraySize = 50;
for (var i = 0; i < Math.ceil(cleaned.length/arraySize); i++) {
    chunk.push(cleaned.slice(i*arraySize,i*arraySize+arraySize));
    var chunkbr = chunk.join("<br>");
    $("#cleanlist").html("Cleaned CI's:<br><span style='color:#f00'>"+chunkbr+"</span>");
    }*/ 
}`

@狡猾

存储在 ci_sites 中的值是:

111 222 333 444

lines_arr 中存储的值是:

111 222 333 444 555 666 777

输出将是:

555,666,777

chunk.join 在 for 中,因为它将块分成 50 个。

【问题讨论】:

  • 你的 chunk.join 不应该在 for 之外吗?您是否有一个实际示例,其中包含 json 对象的内容以及输出应该是什么样的?
  • 我在这里建立了一个例子:jsfiddle.net/nqruwfx9 什么不符合你的要求?
  • 我正在寻找将 ',' 替换为 ';'最后添加一个。我在“var text”的小提琴中添加了更多的值,当它将它分成50我需要一个';'在每个块的末尾也。感谢您的帮助。
  • 您正在将数组放入数组中,因此请替换: chunk.push(cleaned.slice(iarraySize,iarraySize+arraySize) ); with : chunk.push(cleaned.slice(iarraySize,iarraySize+arraySize).join(';') );

标签: javascript php arrays split


【解决方案1】:

我的解决方案:

//Store PHP values.
var ci_sites = [111, 222, 333, 444];


function dobuild(){
//Store textarea input into Array, Duplicates Removed.
var text = '111 222 333 444 555 666 777 abc kjl poi sdf tyu pom bgf yui sdf uyt qdf etr hgf jkh sdg por jkh cdf cdf ùpo eri'.replace(/ /g,'\r\n'); //$("textarea#builder").val();


var lines = text.split(/\r\n|\s+\n|\s+\r|\n+|\r+/g); 
var lines_arr = [];
    $.each(lines,function(index, item){
        if ($.inArray(item, lines_arr) ==-1)
            lines_arr.push(item);
    });
console.dir( lines_arr);
//Remove value from ci_sites.
var A1 = lines_arr;
var A2 = ci_sites;
for (var i = 0; i<A2.length; i++) {
    var arrlen = A1.length;
    for (var j = 0; j<arrlen; j++) {
        if (A2[i] == A1[j]) {
            A1 = A1.slice(0, j).concat(A1.slice(j+1, arrlen));
        }
    }
}

//Chunk The Array Into Sets Of 50.
var cleaned = A1;
var chunk = [];
var arraySize = 50;
for (var i = 0; i < Math.ceil(cleaned.length/arraySize); i++) {
    chunk.push(cleaned.slice(i*arraySize,i*arraySize+arraySize).join(';') );
    var chunkbr = chunk.join("<br>");
    $("#cleanlist").append("<p>i=" + i + " Cleaned CI's:<br><span style='color:#f00'>"+chunkbr+"</span></p>");
    }
}

dobuild();

demo here

【讨论】:

  • 工作愉快!谢谢。
【解决方案2】:

以下 JavaScript 应该可以满足您的需求:

var ci_sites = ['111', '222', '333', '444'];

function dobuild() {
    // grab the user input from the text area (unique)
    var input = $('#builder').val()
        .split(/\r\n|\s+\n|\s+\r|\n+|\r+/g)
        .filter(function (value, index, self) {
            return (self.indexOf(value) === index);
        });

    // diff between user and PHP content
    var diff = input.filter(function (item) {
        return (ci_sites.indexOf(item) < 0);
    });

    // chunk up the array (using chunks of 2 as an example)
    var chunked = chunk(diff, 2);

    // join them back 
    var output = chunked.map(function (item) {
        return item.join(',');
    }).join(';');
}

// http://stackoverflow.com/a/22649021/283078
function chunk(arr, n) {
    return arr.slice(0, (arr.length + n - 1) / n | 0).map(function (c, i) {
        return arr.slice(n * i, n * i + n);
    });
}

JSFiddle example

【讨论】:

    猜你喜欢
    • 2012-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 2021-05-13
    相关资源
    最近更新 更多