Кому я могу изменить строки в массиве?

0

Я получаю строку с asps-страницы следующим образом:

~/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,

Каждый имеет разрыв строки "\ r\n", хотя..

Хотите создать массив только с 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;
            });

        }
    });

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

Теги:

5 ответов

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
    Это сработало отлично!
1
var arr = $.map(data.split(','), function(s) {
    return s.trim().split('?').shift();
});

FIDDLE

0


$.ajax({url: url, success: function (data) {var str = data.replace(/[\ r\n])/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/

0

jQuery.each документы jQuery.each.

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

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

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

Почему бы просто не использовать String split вместо regex?

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню