0

可以说我有一个哈希数组:

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

我想找到一个哈希并添加到它。例如找到“一个”并添加:

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 回答