如何从对象中检索指定的属性

时间:2019-09-05 00:43:07

标签: javascript

假设我们有一个Person对象,如下:

let person = {
   name: "Tom",
   age: "18",
   postcode: 1234,
   city: "Sydney"
}

现在,我想检索nameage属性,并将它们分配给名为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的新手,我可以看到此功能可能非常有用,但是为什么不实现它呢?一句话就能完成?

3 个答案:

答案 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

这如何帮助斗争

丹尼尔