0

文字列の配列があるとします。そして、これらの各文字列の先頭に固定 (共通) 文字列を追加したいと考えています。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、それで何が楽しいのでしょうか? :)

4

5 に答える 5

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);
于 2013-03-28T10:44:54.633 に答える
1

javascript (ECMA 5) の最新の標準では、jquery なしでこれを行うことができます。

var defImgDirPath = 'res/img/';

['home-icon-dark.png','home-icon-light.png'].map(function(i) { 

        return defImgDirPath + i;  });

EDIT : また、jquery の map 関数も同様に機能します。

于 2013-03-28T10:45:27.347 に答える
0

Javascript では、this常にオブジェクト (現在のコンテキスト オブジェクト) を参照するため、文字列にはならないため、別の文字列と連結しようとすると失敗します。

ただし、実行していることに jQuery やオブジェクトを使用する必要はありません。文字列の各配列の先頭に既知の値を追加しているだけです。

jQueryの複雑さなしに、標準のJavascriptを使用して書き直しましょう...

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];
}

実際のループ コードが何を行っているかを簡単に確認できるように、画像配列を変数に入れました。ご覧のとおり、これは非常に単純なループです。ここでは jQuery マジックは必要ありません。

それが役立つことを願っています。

于 2013-03-28T10:46:44.447 に答える
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;
});
于 2013-03-28T10:44:45.773 に答える
0

this.prependString(defImgDirPath);

いいえ。文字列は JavaScript では不変です。新しい文字列への連結は問題なく、それを使用.concatすると次のようになります

var newString = defImgDirPath.concat(this); // no static function!

存在しない場合、どのように書きますか?

オブジェクトを「this」に割り当てることは不可能であるため、できません。

代わりに、作業中の配列のプロパティに割り当てる必要があります (コレクションで作業する代わりに静的を使用します)。$.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;
});
于 2013-03-28T10:48:35.820 に答える