假设我们有一个Person
对象,如下:
let person = {
name: "Tom",
age: "18",
postcode: 1234,
city: "Sydney"
}
现在,我想检索name
和age
属性,并将它们分配给名为student
的新对象,如下所示:
{ name: "Tom", age: "18" }
我绝对可以像这样手动创建student
对象:
let student= {
name: person.name,
age: person.age
}
但是问题是我必须提前知道属性名称,例如“名称”和“年龄”,因此在键入属性名称时,Visual Studio Code这样的IDE中没有智能感知支持。
或
我可以将rest运算符用作:
let { postcode, city, ...student} = person;
但是这种方法不是很简单,因为我仍然需要知道一个对象中有多少个属性,对于我来说,student
对象是一个非常简单的对象,但是如果存在一个对象,它将很容易出错。一个对象中有许多属性,我只想检索其中的一两个。
我该如何以最简洁有效的方式做到这一点?
已编辑:
我实际上的意思是,如果有一个简单而高级的功能,那么我可以通过以下语句完成工作:
let student = { person.name, person.age }; // not valid syntax, I know
or
let student = { get person.name, get person.age }; // non existent syntax, but you get the idea
所以我可以依靠智能感知来定义一切。 看来我需要至少写两个单独的语句才能实现目标,这听起来似乎不对,我是JS的新手,我可以看到此功能可能非常有用,但是为什么不实现它呢?一句话就能完成?
答案 0 :(得分:1)
您可以定义一个类,例如
class Student {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
let student = new Student(person.name, person.age);
您还可以考虑将Person
设为一个类,然后将Student
设为其子类,那么您就不需要两个不同的对象。
答案 1 :(得分:-1)
创建一个函数,该函数将要提取的对象和属性数组作为参数。然后创建一个空对象,将给定属性添加到该对象并返回它。
const getProps = (obj, props) =>
props.reduce((ac,a) => {
ac[a] = obj[a];
return ac;
},{});
let person = {
name: "Tom",
age: "18",
postcode: 1234,
city: "Sydney"
}
console.log(getProps(person, ['name', 'age']))
答案 2 :(得分:-1)
我认为这可能会有所帮助。可能不是完整的答案,我不完全理解您的要求。
您可以使用类似这样的字符串访问对象
myObject[string]
示例...
Let myFields = ["name", "age", "postcode"];
let myObject = {};
myFields.forEach(f => myObject[f] = "");
console.log(myObject);
// { name: "", age: "", postcode: "" }
示例2 ...
let myObject = {};
myObject["name"] = "Daniel";
myObject["age"] = 32;
myObject["postcode"] = "78UH4";
console.log(myObject);
// { name: "", age: "", postcode: "" }
myObject.city = "Thurles";
console.log(myObject["city"])
// Thurles
这如何帮助斗争
丹尼尔