如何更改javascript对象中的对象键值

时间:2018-03-23 11:50:33

标签: javascript jquery json

说我有以下对象:

obj1 = {
   'patato la blaza' : {
        'weight' : 5,
        'height' : 90
    },
    'apple ibiza' : {
        'weight' : 3,
        'height' : 84
    }
}

我想浏览keys并修改它们,I.E。更改key值,我如何在javascript / jQuery中执行此操作? ,我知道我可以这样修改value

$.each(obj1 , function(i , e){
   obj1[i] = "someramdomvalue"
});

但我不太明白如何更改/操纵键的值,在上面提供的对象中,我想将patato la blaza的值更改为patato }和apple ibizaapple,我会使用正则表达式来获取缩短版本,但我不知道如何将这些缩短的值添加为对象中的新key 。我将不胜感激。

注意:: - 我已搜索过SO,但大部分问题都涉及如何更改value ob对象的值,而不是keys

4 个答案:

答案 0 :(得分:3)

我在Object.keys()

上使用reduce



let obj = {
  'patato la blaza': {
    'weight': 5,
    'height': 90
  },
  'apple ibiza': {
    'weight': 3,
    'height': 84
  }
};

obj = Object.keys(obj).reduce((a, b) => {
  a[b.substring(0, b.indexOf(' '))] = obj[b];
  return a;
}, {});

console.log(obj);




答案 1 :(得分:2)

可能是这样的:

const obj1 = {
   'patato la blaza' : {
        'weight' : 5,
        'height' : 90
    },
    'apple ibiza' : {
        'weight' : 3,
        'height' : 84
    }
};
// Example key transform
const transform = x => x.split(" ")[0];

Object.keys(obj1).forEach(key => {
    const val = obj1[key];
    delete obj1[key];
    obj1[transform(key)] = val;
});

console.log(obj1);

答案 2 :(得分:0)

如果你想使用$.each(),我会创建一个带有所需键的新属性,复制现有属性的值,然后删除旧属性:

$.each(obj1 , function(i , e){
   obj1["somenewkey"] = obj1[i];
   delete obj1[i];
});

答案 3 :(得分:0)

Create a map of all the changes you want and build a new object with the new keys names:

var obj = {
   'patato la blaza' : {
        'weight' : 5,
        'height' : 90
    },
    'apple ibiza' : {
        'weight' : 3,
        'height' : 84
    }
};

var changes = {
  'patato la blaza': 'potato',
  'apple ibiza': 'apple'
}

var res = Object.assign({}, ...Object.entries(obj).map(([prevKey, val]) => ({[changes[prevKey]]: val})));

console.log(res);