gpt4 book ai didi

javascript - 如何轻松地从对象中获取非 getter 属性

转载 作者:行者123 更新时间:2023-11-29 16:30:46 25 4
gpt4 key购买 nike

我有一个看起来像这样的对象:

const obj = {
x: 1,
y: 2,
foo() {
return "foo";
},
get bar() {
return "bar";
}
}

为了简单起见,这个对象只有一个 getter 方法,但是,其他对象可以有更多的 getter。

是否有一种简单的方法来获取对象的属性,从而排除所有函数以及所有 getter 方法?

我想要的结果是:

const properties = ["x", "y"];

我试着研究使用 Object.keys() ,但是这给出了所有属性,包括所有方法。我也试过调查 Object.getOwnPropertyNames() ,但是,这仍然包括结果中的所有函数名称。

请注意:我知道我可以通过在某处维护我自己的一组 getter 并检查是否属性包含在该集合中。但是,这对我来说似乎不是一个很好的解决方案,因为集合和对象的属性之间存在依赖关系。我还知道我可以将方法的 enumerable 属性设置为 false。但是,这需要我扫描对象中的所有方法并手动执行此操作。有没有更简单的方法可以自动执行此操作以达到预期的结果?

最佳答案

使用Object.getOwnPropertyDescriptors 获取具有相同键的对象,其值是描述符。使用 Object.entries 将对象转换为数组,使用 .filter 过滤具有 .value 的描述符(仅数据描述符;访问描述符,就像那些有 setter/getter 的人一样,没有 .values) 并确保该值也不是函数。然后 .map 到他们的键:

const obj = {
x: 1,
y: 2,
foo() {
return "foo";
},
get bar() {
return "bar";
}
};

const output = Object.entries(Object.getOwnPropertyDescriptors(obj))
.filter(([, desc]) => desc.hasOwnProperty('value') && typeof desc.value !== 'function')
.map(([key]) => key);
console.log(output);

关于javascript - 如何轻松地从对象中获取非 getter 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58387089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com