说我有以下对象:
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 ibiza
到apple
,我会使用正则表达式来获取缩短版本,但我不知道如何将这些缩短的值添加为对象中的新key
。我将不胜感激。
注意:: - 我已搜索过SO,但大部分问题都涉及如何更改value
ob对象的值,而不是keys
答案 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);