вывод javascript в виде точки с запятой кусками 50

Я озадачен, пытаясь разобраться с этим.

1) У меня есть массив PHP, который является JSON_ENCODE для хранения в массиве JS1.

2) Затем текстовая область, вход которой разделяется на массив JS2.

3) затем сравните оба массива и слайс & Concat со значениями из array1 вычитается.

4) затем возьмите array2 и разделите его на arraySize, равный 50.

Проблема, с которой я сталкиваюсь, заключается в том, что мне нужно, чтобы порции по 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>");
}*/
}`

@sly

Значения, хранящиеся в ci_sites:

111 222 333 444

Значения, хранящиеся в lines_arr:

111 222 333 444 555 666 777

Выход будет:

555666777

Chunk.join находится в for, поскольку он разбивает чанки на 50.

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();

демо здесь

0

Другие решения

Следующий 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

0

По вопросам рекламы [email protected]