2013-11-15 4 views
0

Я получаю строку из страницы жереха, как это:Кому я могу изменить строки в массиве?

~/TestImages/media/9.jpg?width=443&height=388&ext=.jpg?id=92, 
~/TestImages/media/8.jpg?width=506&height=337&ext=.jpg?id=91, 
~/TestImages/media/jpeg-3.jpg?width=720&height=480&ext=.jpg?id=75, 
~/TestImages/media/4.jpg?width=725&height=483&ext=.jpg?id=77, 
~/TestImages/media/7.jpg?width=957&height=629&ext=.jpg?id=81, 
~/TestImages/media/10.jpg?width=478&height=356&ext=.jpg?id=85, 

Каждый имеет разрыв строки «\ г \ п», хотя ..

Хотите создать массив с только URL, (т.е. "/TestImages/media/9.jpg").

Попытка:

$.ajax({ 
     url: url, 
     success: function(data){ 
      var str = data.replace(/(\r\n|\n|\r)/gm,""), 
       imgArray = new Array, 
       tdata = str.split(","); 

      // make random order 
      for(var i=0; i < 13; i++){ 
       var randomNumber = Math.floor(Math.random()*tdata.length); 
       imgArray.push(tdata.splice(randomNumber,1)); 
      } 
      $.each(imgArray, function(i, item) { 
       var tmp = ""; 
       tmp = item[0].match(/~(.*?)\.jpg/g, "$1");     
       item[0] = tmp; 
      }); 

     } 
    }); 

Не имея много удачи меняющегося значения внутри массива .. Кто-нибудь есть способ сделать это?

ответ

1

Это, кажется, делает работу:

var s = "~/TestImages/media/9.jpg?width=443&height=388&ext=.jpg?id=92, \ 
~/TestImages/media/8.jpg?width=506&height=337&ext=.jpg?id=91, \ 
~/TestImages/media/jpeg-3.jpg?width=720&height=480&ext=.jpg?id=75, \ 
~/TestImages/media/4.jpg?width=725&height=483&ext=.jpg?id=77, \ 
~/TestImages/media/7.jpg?width=957&height=629&ext=.jpg?id=81, \ 
~/TestImages/media/10.jpg?width=478&height=356&ext=.jpg?id=85"; 

var sa = s.split(","); 
for(var i=0; i < sa.length;i++) { 
    var first = sa[i].indexOf("/"); 
    var last = sa[i].indexOf("?"); 
    sa[i] = sa[i].substring(first, last); 
} 

console.log(sa); 

Вы можете играть с этим код здесь: http://jsbin.com/ePevaWos/1/edit?js,console

+0

Это сработало отлично! – Dennis

1
var arr = $.map(data.split(','), function(s) { 
    return s.trim().split('?').shift(); 
}); 

FIDDLE

0


$ .ajax ({ URL: URL, успех: функция (данные) { вар ул = data.replace (/ [\ г \ п])/g, ""), // удалять все разрывы строк tdata = str.split (","), imgArray = [];

 $.each(tdata, function(i, item) { 
      var match = item.match(/~(.*?)\.jpg/)[1]; 
      imgArray.push(match); 
     }); 

     //shuffle now if desired 
    } 
}); 

Вы также можете просто написать:

var imgArray = data.match(/~(.*?)\.jpg/g); 

http://jsfiddle.net/pDD5G/

-2

Почему бы не просто использовать строку split вместо регулярных выражений?

for (var i = 0;i < imgArray.length; i++) { 
    imgArray[i] = imgArray[i].split('?')[0]; 
} 
0

Se в docs из jQuery.each.

Javascript не имеет ссылок, поэтому вы не можете изменять значения элементов массива при его переходе по нему.

Итак, что вам нужно сделать, это создать еще один массив и в то время как итерация, нажмите значения в него:

var dst = []; 
$.each(imgArray, function(i, item) { 
    dst.push(item[0].match(/~(.*?)\.jpg/g, "$1")[1]); 
}); 
Смежные вопросы