我有这个对象:
obj = {key : val,
key1 : val1,
key2 : {key21 : val21,key22 : val22},
key3 : val3}
我想生成一个新对象:
objnew = {key : val,
key1 : val1,
key21 : val21,
key22 : val22,
key3 : val3}
答案 0 :(得分:1)
根据您的意见,如果确实想要出于任何原因保留订单,并且除了key2
之外不想做任何其他事情,请在此处'可能的解决方案。
有关对象键顺序的信息,请阅读this question。简而言之,在大多数情况下,依靠它很可能是一个坏主意。您最好使用Map
实例或仅使用数组。
let obj = {
key: 0,
key1: 1,
key2: {key21: 21, key22: 22},
key3: 3
};
let objArray = Object.keys(obj).map(key => ({key, value: obj[key]}));
let result = objArray.reduce((result, entry) =>
Object.assign(result, entry.key === 'key2' ? entry.value : {[entry.key]: entry.value})
, {});
console.log(result);

答案 1 :(得分:0)
对于2级对象结构(具有Object.keys()
和Object.assign()
函数):
var obj = {
'key' : 'val',
'key1' : 'val1',
'key2' : {'key21' : 'val21', 'key22' : 'val22'},
'key3' : 'val3'
};
Object.keys(obj).forEach(function(k){
if (typeof obj[k] === 'object') {
Object.assign(obj, obj[k]);
delete obj[k];
}
});
console.log(obj);
答案 2 :(得分:0)
你走了:
var obj = {
key : 1,
key1 : 2,
key2 : { key21 : 3,key22 : 4 },
key3 : 5
};
Object.keys(obj).forEach(function(key) {
if(typeof obj[key] === 'object') {
Object.keys(obj[key]).forEach(function(innerKey) {
obj[innerKey] = obj[key][innerKey];
});
delete obj[key];
}
});
console.log(obj);