我该如何更改数组中的字符串?

时间:2013-11-15 21:10:28

标签: javascript jquery

我从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 个答案:

答案 0 :(得分:1)

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

FIDDLE

答案 1 :(得分: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

答案 2 :(得分:0)


      $就({         url:url,         成功:函数(数据){             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/

答案 3 :(得分:0)

查看jQuery.each的{​​{3}}。

Javascript没有引用,因此,当您迭代它时,不能更改数组元素的值。

所以,你需要做的是创建另一个数组并在迭代时将值推入其中:

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

答案 4 :(得分:-2)

为什么不使用字符串split而不是正则表达式?

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