Ответ сервера с двойным разделением возвращается неправильно

#javascript #arrays #split #sequence

#javascript #массивы #разделение #последовательность

Вопрос:

Это функция для измельчения responseText с сервера. Я прокомментировал структуры данных для ясности.

 function chopUpResponse(serverResponse)
{
        //  serverResponse: ("a|b|c@d|e|f@g|h|i")
    console.log("chopUpResponse called");
    var ranges = [];
    var firstSplit = [];
    var secondSplit = [];

    firstSplit = serverResponse.split("@");
    console.log("firstSplit: "   firstSplit);
        //  result: ("a|b|c", "d|e|f", "g|h|i")

    for (var i=0; i<firstSplit.length; i  )
    {
        secondSplit = secondSplit.concat(firstSplit[i].split("|"));
        console.log("secondSplit: "   secondSplit);
            //  desired: ("a","b","c","d","e","f","g","h","i")
    }

    for (var j=0; j<firstSplit.length; j  )
    {
            console.log("j: " j);
            for (var k=0; k<3; k  )
            //  would be nice to generate the '3' dynamically from the @ delimiter
            {
                    console.log("k: " k);
                    ranges[j,k] = secondSplit[j 1*k];
                            //  the  1 so we're not * by zero!
                            //  j 1*k should equal secondSplit.length...
                    console.log("ranges[" j "," k "]: "   ranges[j,k]);
            }
    }   
    return ranges;
}
  

Последняя функция предназначена для создания двумерного массива. По какой-то причине, которую я пропускаю, вместо того, что я ожидаю, я получаю это:

 ranges["a,b,c","b,c,d","c,d,e"]
  

Чего мне не хватает? Есть ли лучший способ сделать это? Хотел бы я просто использовать какой-нибудь PHP внутри этого скрипта, потому что он намного лучше справляется с такого рода данными…

Комментарии:

1. я знаю, что что-то не так со счетчиком во втором цикле… но я не знаю, как заставить его правильно проходить через ВЕСЬ массив secondSplit … aaaaarrrghghgghhhhhh … 🙁

2. забудьте об этом. вместо этого я должен использовать счетчик. глупая ошибка новичка…

Ответ №1:

 function chopUpResponse(serverResponse)
{
    //  serverResponse: ("a|b|c@d|e|f@g|h|i")
    console.log("chopUpResponse called");
    //var ranges = [];
    var firstSplit = [];
    //var secondSplit = [];

    firstSplit = serverResponse.split("@");
    console.log("firstSplit: "   firstSplit);
    //  result: ("a|b|c", "d|e|f", "g|h|i")

    for (var i=0; i<firstSplit.length; i  )
    {
        //secondSplit = secondSplit.concat(firstSplit[i].split("|"));
        firstSplit[i] = firstSplit[i].split("|");
        //console.log("secondSplit: "   secondSplit);
        //  desired: ("a","b","c","d","e","f","g","h","i")
    }

    //for (var j=0; j<firstSplit.length; j  )
    //{
    //        console.log("j: " j);
    //        for (var k=0; k<3; k  )
    //        //  would be nice to generate the '3' dynamically from the @ delimiter
    //        {
    //                console.log("k: " k);
    //                ranges[j,k] = secondSplit[j 1*k];
    //                        //  the  1 so we're not * by zero!
    //                        //  j 1*k should equal secondSplit.length...
    //                console.log("ranges[" j "," k "]: "   ranges[j,k]);
    //        }
    //}   
    //return ranges;
    return firstSplit;
}
  

Ответ №2:

 function chopUpResponse(res) {
    // Split on the '@'
    var split = res.split("@"),
        // Loop counter
        i = 0,
        // Number of arrays produced by splitting on '@'
        len = split.length,
        // Will be each array produced by splitting on '@'
        // inside the loop body
        part,
        // Holds the results
        ret = [];

    for ( ; i < len; i   ) {
        part = split[ i ];
        // Array::push adds items to an array. Function::apply unpacks an array
        // as indidual arguments
        ret.push.apply( ret, part.split("|") )
    }

    // Over and out.
    return ret;
}
  

надеюсь, это поможет! приветствия.