说我有一个字符串数组。我想在每个字符串前面添加一个固定的(通用)字符串。 我知道在Javascript中,字符串可以像strM = str1 + str2 + str3 + ... + strN
或strM = concat(str1, str2, str3, ..., strN)
一样连接。考虑一下这段代码。
var defImgDirPath = 'res/img/';
$([
'home-icon-dark.png',
'home-icon-light.png'
]).each(function() {
/*
* Prepend each string with defImgDirPath
*/
});
现在我做不到this = defImgDirPath + this;
(我愚蠢到试试)
此外,我尝试了return (defImgDirPath + this);
,但这也无效。
我正在考虑像this.prependString(defImgDirPath);
这样的函数,但这样的函数是否存在?如果没有,我该如何写一个?
注意:我知道它可以通过for
循环轻松简单地完成,但有什么好处呢? :)
答案 0 :(得分:1)
var defImgDirPath = 'res/img/';
var images = [
'home-icon-dark.png',
'home-icon-light.png'
];
$(images).each(function(idx, val) {
images[idx] = defImgDirPath + val;
});
console.log(images);
答案 1 :(得分:1)
在最新的javascript标准(ECMA 5)中,您可以在没有jquery的情况下执行此操作:
var defImgDirPath = 'res/img/';
['home-icon-dark.png','home-icon-light.png'].map(function(i) {
return defImgDirPath + i; });
编辑:此外,jquery的map函数也类似。
答案 2 :(得分:0)
问题是您正在更改数组中项目的副本,因此数组将不受影响。
循环遍历数组中的索引并将结果放回数组中:
var arr = [ 'home-icon-dark.png', 'home-icon-light.png' ];
for (var i = 0; i < arr.length; i++) {
arr[i] = defImgDirPath + arr[i];
}
如果你真的想从jQuery使用循环方法,那么你需要使用map
,这样你就可以得到一个数组的结果。请注意,您需要使用回调函数的参数,因为this
不是数组中的项目:
arr = $.map(arr, function(str){
return defImgDirPath + str;
});
答案 3 :(得分:0)
在Javascript中,this
总是引用一个对象(当前的上下文对象),因此它永远不会是一个字符串,因此尝试将它与另一个字符串连接将失败,因为你发现
然而,没有必要使用jQuery或对象来做你正在做的事情;你只是将一个已知值添加到每个字符串数组的开头。
让我们使用标准的Javascript重写它,没有jQuery的复杂性......
var defImgDirPath = 'res/img/';
var images = [
'home-icon-dark.png',
'home-icon-light.png'
];
for(var count=0; count<images.length; count++) {
images[count] = defImgDirPath + images[count];
}
我已将images数组放入变量中,以便更容易看到实际循环代码的作用。如你所见,这是一个非常简单的循环;这里不需要jQuery魔法。
希望有所帮助。答案 4 :(得分:0)
this.prependString(defImgDirPath);
没有。字符串在JavaScript中是不可变的。连接到新字符串就可以了,使用.concat
它看起来像
var newString = defImgDirPath.concat(this); // no static function!
如果不存在,我该如何写一个?
你不能,因为assigning object to "this"是不可能的。
相反,您必须分配您正在处理的数组的属性(使用static $.each
而不是处理集合):
var arr = [
'home-icon-dark.png',
'home-icon-light.png'
];
$.each(arr, function(i) {
arr[i] = defImgDirPath + this;
});
arr[0] // res/img/home-icon-dark.png
我也尝试了
return (defImgDirPath + this);
您需要使用map,创建一个新数组:
var arr = $.map([
'home-icon-dark.png',
'home-icon-light.png'
], function(str) {
return defImgDirPath + str;
});
当然,没有jQuery可能会更容易:
for (var i=0; i<arr.length; i++) {
arr[i] = defImgDirPath + arr[i];
}
并且map
也可用作本机函数(不在过时的浏览器中):
var arr = [
'home-icon-dark.png',
'home-icon-light.png'
].map(function(str) {
return defImgDirPath + str;
});