从主键创建对象,从嵌套对象创建值



我会保持简单。假设我有一个这样的对象:

let myObj = {
name:{
value: "John",
type: "contains"  
},
age:{
value: "5",
type: "contains"  
}
}

如何创建一个包含主键但值仅为其嵌套对象的value的新对象,如下所示:

let myNewObj = {
name: "John",
age: "5"
}

提前谢谢。

如果只想提取每个对象的value密钥,可以执行以下操作:

let myObj = {
name:{
value: "John",
type: "contains"  
},
age:{
value: "5",
type: "contains"  
}
}

let newObj = {}
for (const key in myObj) {
newObj[key] = myObj[key].value;
}
console.log(newObj);
// {
//   age: "5",
//   name: "John"
// }

将对象转换为其条目数组,并通过它映射以返回[key,value]
然后使用Object.fromEntries转换为新对象

let myObj = {
name:{
value: "John",
type: "contains"  
},
age:{
value: "5",
type: "contains"  
}
}

let myNewObj = Object.fromEntries(Object.entries(myObj).map(([key,{value}])=>[key,value]))
console.log(myNewObj)

通常,为了能够根据映射函数转换对象属性的所有值,可以使用Object.entries为每个属性制作一个[key, value]数组的数组,然后使用Object.fromEntries从这些数组中重建对象。您可以在该操作的中间提供一个通用转换函数,如下所示:

const transformValues = (obj, transform) =>
Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, transform(value)]));

您在特定情况下需要的转换函数将获取属性值(这是一个对象),并只返回其value属性。像这样:({ value }) => value(这很容易销毁。)

let myObj = {
name: {
value: "John",
type: "contains"
},
age: {
value: "5",
type: "contains"
}
}
const transformValues = (obj, transform) =>
Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, transform(value)]));
const result = transformValues(myObj, ({ value }) => value);
console.log(result);

最新更新