如何在Javascript键中替换/命名键:值对象?

时间:2013-07-09 03:06:53

标签: javascript

我应该如何替换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似乎在不同的范围内。我该如何解决?也许还有更好的方法可以做到这一点?

3 个答案:

答案 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);