我应该如何替换Javascript键中的键字符串:值哈希映射(作为对象)?
这是我到目前为止所做的:
var hashmap = {"aaa":"foo", "bbb":"bar"};
console.log("before:");
console.log(hashmap);
Object.keys(hashmap).forEach(function(key){
key = key + "xxx";
console.log("changing:");
console.log(key);
});
console.log("after:");
console.log(hashmap);
看到它在此jsbin中运行。
“之前”和“之后”的哈希映射是相同的,因此forEach
似乎在不同的范围内。我该如何解决?也许还有更好的方法可以做到这一点?
答案 0 :(得分:18)
它与范围无关。 key
只是一个局部变量,它不是实际对象键的别名,因此分配它不会改变对象。
Object.keys(hashmap).forEach(function(key) {
var newkey = key + "xxx";
hashmap[newkey] = hashmap[key];
delete hashmap[key];
});
答案 1 :(得分:1)
如果键顺序很重要,您可以使用:
const clone = Object.fromEntries(
Object.entries(o).map(([o_key, o_val]) => {
if (o_key === key) return [newKey, o_val];
return [o_key, o_val];
})
);
这将在旧键所在的位置创建一个带有新键的对象。
答案 2 :(得分:0)
您只是更改对象键的副本,因此不会更改原始对象。您可以创建一个新对象来保存新密钥,如下所示:
var hashmap = {"aaa":"foo", "bbb":"bar"};
console.log("before:");
console.log(hashmap);
var newHashmap = {};
Object.keys(hashmap).forEach(function(key){
var value = hashmap[key];
key = key + "xxx";
console.log("changing:");
console.log(key);
newHashmap[key] = value;
});
console.log("after:");
console.log(newHashmap);