可以说我有一个哈希数组:
hash = [{"one": 1}, {"two": 2}]
我想找到一个哈希并添加到它。例如找到“一个”并添加:
hash = [{"one": 1, "new": new}, {"two": 2}]
我可以通过哈希键来做到这一点吗?如果是这样,我会怎么做?或者有没有更好的方法在 Javascript 中做这件事?我不想复制哈希,创建一个新的并删除旧的。只需更新已经存在的内容。
可以说我有一个哈希数组:
hash = [{"one": 1}, {"two": 2}]
我想找到一个哈希并添加到它。例如找到“一个”并添加:
hash = [{"one": 1, "new": new}, {"two": 2}]
我可以通过哈希键来做到这一点吗?如果是这样,我会怎么做?或者有没有更好的方法在 Javascript 中做这件事?我不想复制哈希,创建一个新的并删除旧的。只需更新已经存在的内容。
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;
}
}
这是我刚刚编写的一个函数。
/*
* 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;
}
如果您乐于使用下划线,您可以通过以下方式完成它:
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));