0

ハッシュの配列があるとしましょう:

hash = [{"one": 1}, {"two": 2}]

そして、ハッシュを見つけて追加したいと思います。たとえば、「1」を見つけて追加します。

hash =  [{"one": 1, "new": new}, {"two": 2}]

ハッシュキーでこれを行うことができますか? もしそうなら、どうすればいいですか?または、Javascriptでこれを行うためのより良い方法はありますか? ハッシュをコピーしたり、新しいものを作成したり、古いものを削除したりしたくありません。すでにあるものを更新するだけです。

4

3 に答える 3

1

JavaScriptは非常に動的であるため、次のようなことができるはずです。

var hash = [{"one": 1}, {"two": 2}];

var hLength = hash.length;
for(int i=0; i<hLength; i++){         // Loop to find the required object.
   var obj = hash[i];

   if(obj.hasOwnProperty('one')){     // Condition you're looking for
       obj["new"] = "new";            // Property you wish to add.
       break;
   }
}
于 2013-02-24T18:12:31.150 に答える
0

これを行うために私が書いたばかりの関数を次に示します。

/*
 * hashes - (array) of hashes
 * needle - (string) key to search for / (int) index of object
 * key - (string) key of new object you wish to insert
 * value - (mixed) value of new object you wish to insert
 */

function addToHash(hashes, needle, key, value) {
  var count = hashes.length;
  // If needle is a number treat it as an array key
  if (typeof needle === 'number' && needle < count) {
    hashes[needle][key] = value;
    return true;
  } else {
    // Search hashes for needle
    for (var i=0; i<count; i++)
    {
      if (needle in hashes[i]) {
        hashes[i][key] = value;
        return true;
      }
    }
  }
  return false;
}
于 2013-02-24T18:18:00.980 に答える
0

アンダースコアを使用することに満足している場合は、次から始めることでそれを実行できます。

var hashes = [{"one": 1}, {"two": 2}];

var changed = _.map(hashes, function(hash){
    if(hash.one) {
        hash["new"] = "new";
        return hash
    }
    return hash;
});

フィルター関数を渡して if ステートメントをカプセル化し、別の関数を渡して変更をハッシュにカプセル化することで、少し一般化できます。

編集ハッシュで何を探すべきかを一般化したい場合、これはうまくいくかもしれません:

var hashes = [{"one": 1}, {"two": 2}];

var isOne = function(hash) {
    return hash.one;
}

var addNew = function(hash) {
    hash["new"] = "new";
    return hash;
}

var hashChanger = function(filter, editor) {
    return function(hash) {
        if(filter(hash)) {
            return editor(hash);
        }
        return hash;
    }
}

var changed = _.map(hashes, hashChanger(isOne, addNew));
于 2013-02-24T18:18:11.993 に答える