在JavaScript对象中更改密钥名称

时间:2015-09-08 07:44:45

标签: javascript

我正在检查JavaScript对象中的属性,通过删除前缀“element”并将新值保存在另一个对象中来替换某些键。

var keys = Object.keys(json);
for (var j=0; j < keys.length; j++) {
   key = keys[j].replace("element_", "");
   switch(key) {
   default :
      tmp[key] = json[key];
      break;
   }
}

问题在于,当我这样做时,我可以记录所有键,它们具有正确的名称,但是当我尝试设置与这些键相关联的值时,它们是未定义的(json [key])。

这是因为我将密钥(Objects)转换为Strings(使用replace方法)吗?

5 个答案:

答案 0 :(得分:24)

我们会写一个小功能来按照你想要的方式修复密钥。

function fix_key(key) { return key.replace(/^element_/, ''); }

下划线

_.object(
  _.map(_.keys(json), fix_key),
  _.values(json)
)

ES5 /环

var keys = Object.keys(json);
var result = {};

for (i = 0; i < keys.length; i++) {
  var key = keys[i];
  result[fix_key(key)] = json[key];
}

return result;

ES5 /减少

Object.keys(json) . reduce(function(result, key) {
  result[fix_key(key)] = json[key];
  return result;
}, {});

ES6

Object.assign(
  {},
  ...Object.keys(json) .
    map(key => ({[fix_key(key)]: json[key]}))
)

这使得一个小对象的数组每个都有一个键值对,使用ES6&#34;计算属性名称&#34;功能,然后使用ES6&#34;传播&#34;将它们传递给Object.assign。运算符,将它们合并在一起。

答案 1 :(得分:4)

问题是您正在使用新密钥在原始对象中查找属性。使用keys[j]代替key

var keys = Object.keys(json);
for (var j=0; j < keys.length; j++) {
   var key = keys[j].replace(/^element_/, "");
   tmp[key] = json[keys[j]];
}

我在替换中使用正则表达式,以便^可以匹配字符串的开头。这样它只会在字符串作为前缀时替换该字符串,并且不会将noexample_data转换为no_data

注意:你拥有的不是“json”,它是一个JavaScript对象。 JSON是一种表示数据的文本格式。

  

这是因为我将键(对象)转换为字符串   (使用替换方法)?

没有。键是字符串,而不是对象。

您还可以通过删除旧对象并添加新对象来更改原始对象中的属性:

var keys = Object.keys(json);
for (var j=0; j < keys.length; j++) {
   if (keys[j].indexOf("element_") == 0) {
     json[keys[j].substr(8)] = json[keys[j]];
     delete json[keys[j]];
   }
}

答案 2 :(得分:2)

key不是原始json,因为您已移除element_前缀

var keys = Object.keys(json);
for (var j=0; j < keys.length; j++) {
   key = keys[j].replace("element_", "");
   var _key = keys[j];
   switch(key) {
   default :
      tmp[key] = json[_key];
      break;
   }
}

答案 3 :(得分:2)

试试这个:

var keys = Object.keys(json);
for (var j=0; j < keys.length; j++) {
   var key = keys[j]; // key
   var value = json[key]; // data
   delete json[key]; // deleting data with old key
   key = key.replace("element_", ""); // renaming key
   json[key] = value; // setting data with new key
}

答案 4 :(得分:0)

ES2019

Object.fromEntries(
  Object.entries(json).map(([k,v]) => [k.replace('element_', ''), v])
);