#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;
}
надеюсь, это поможет! приветствия.