Удалить "," из Strig (и вернуть RGB \ n String) - PullRequest
0 голосов
/ 17 января 2019

, поэтому я застрял в этой проблеме на несколько дней: Мой вклад такой:

"255,255,255,10,251,91,31,4,220,220,220,1"

Это строка с 3 различными значениями RGB, которые также идут с числом, указывающим, что их количество изменяется от самого высокого до самого низкого. Вы можете перевести строку сверху на:

"RED1, GREEN1, BLUE1, QUANTITY1, RED2, GREEN2 ... "

Пока 1 обозначает первый цвет, а 2 - второй и т. Д.

Мне нужно вернуть первый цвет без его количества. Поэтому мой вывод должен выглядеть так:

"255,255,255,251,91,31,220,220,220"

Я пробовал разные вещи, вот одна из них:

var firstC, secondC, thirdC;
var pointer = "firstC";

function getEachColorValue(color) {
    var startIndex = 0;
    var endIndex = 0;

    for (var i = 0; i < color.length; i++) {

        if (color.charAt(i) == ",") {
        endIndex = i;

            if (pointer == "firstC") {
                firstC = color.substring(startIndex, endIndex);
                startIndex = endIndex + 1;
                pointer = "secondC";
            } else if (pointer == "secondC") {
                secondC = color.substring(startIndex, endIndex);
                startIndex = endIndex + 1;
                pointer = "thirdC";
            } else if (pointer == "thirdC") {
                thirdC = color.substring(startIndex, endIndex);
                startIndex = endIndex;
                pointer = "firstC";
            }
        }
    }
}

Это выдвигает RED1 в firstC, GREEN1 в secondC и BLUE1 в thirdC

Я подумал сделать это один раз, использовать функцию для записи firstC, secondC, thirdC в массив, сбрасывать их. Затем нарежьте col3 на подстроку без первого цветового поддона, затем повторите.

// Global variables
var stringHolder;
var newString;
var counter = 0;
var colorSetHT = new Array;

// main
createSubstring(col3);

function createSubstring(color) {
    var startIndex = 0;
    var endIndex = 0;

    for (var i = 0; i < color.length; i++) {
        if (color.charAt(i) == ",") {
            counter++;
            endIndex = i;
    }
    if (counter == 4) {
        stringHolder = color.substring(startIndex, endIndex);
        alert(stringHolder);
        newString = color.substring(endIndex+1, color.length);

        getEachColorValue(stringHolder);
        colorSetHT.push(firstC, secondC, thirdC)
        colorReset();

        counter = 0;
        stringHolder = "";
//          createSubstring(newString); // ?
        }
    }
}

Я пробовал это, но пока не повезло. Я даже пытался сделать это рекурсивно. Я новичок в Javascript (на самом деле делаю это для Extendscript), я думаю, что есть способ проще, работать с split/slice, но я пока не смог найти его. Я постарался сделать его как можно более простым и быстрым для чтения, пожалуйста, дайте мне знать, если я могу предоставить какую-либо дополнительную информацию, заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 17 января 2019

Попробуйте

let output = input.split(',').filter((x,i)=> i%4-3).join();

let input="255,255,255,10,251,91,31,4,220,220,220,1"

let output = input.split(',').filter((x,i)=> i%4-3).join();

console.log(output);
0 голосов
/ 17 января 2019

Используйте простой цикл for, например, так:

const str = "255,255,255,10,251,91,31,4,220,220,220,1";

var colors = str.split(",");

var x = Math.floor(colours.length / 4);

while (x--) {
    colors.splice((x + 1) * 4 - 1, 1);
}

colors = colors.join(",");

console.log(colors);
0 голосов
/ 17 января 2019

Вот как это сделать с split.

var input = "255,255,255,10,251,91,31,4,220,220,220,1";
var inputArray = input.split(",");
var outputArray = [];
for(let i = 0;i<inputArray.length;i++)
{
  if(i%4 != 3)
  {
    outputArray.push(inputArray[i]);
  }
}
var output = outputArray.join(",");
console.log(output);
...