如何使用'this'添加字符串

时间:2013-03-28 10:40:23

标签: javascript jquery string each prepend

说我有一个字符串数组。我想在每个字符串前面添加一个固定的(通用)字符串。 我知道在Javascript中,字符串可以像strM = str1 + str2 + str3 + ... + strNstrM = 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循环轻松简单地完成,但有什么好处呢? :)

5 个答案:

答案 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;
});