javascript - 打字稿:合并由 Object.defineProperty 创建的对象
问题描述
我有一个这样的数组:
let aa = [
Object.defineProperty({alignedType: "t"}, "f1", {value: 1}),
Object.defineProperty({alignedType: "t"}, "f2", {value: 2}),
Object.defineProperty({alignedType: "t"}, "f3", {value: 3}),
Object.defineProperty({alignedType: "t"}, "f4", {value: 4})
];
我需要将此数组简化为一个简单的对象,例如:
let yyy = aa.reduce((acc, e) => {
return {...acc, ...e};
});
我正在运行yyy
的对象仅包含一个对象,其中仅包含alignedType: "t"
. 它没有更多的属性。
在这里你有调试器:
我期待的对象是:{alignedType: "t", f1: 1, f2: 2, f3: 3, f4: 4}
.
有任何想法吗?
解决方案
您需要设置{ enumerable: true }
说在枚举相应对象的属性期间显示此属性:
let aa = [
Object.defineProperty({ alignedType: 't' }, 'f1', { value: 1, enumerable: true }),
Object.defineProperty({ alignedType: 't' }, 'f2', { value: 1, enumerable: true }),
Object.defineProperty({ alignedType: 't' }, 'f3', { value: 1, enumerable: true }),
Object.defineProperty({ alignedType: 't' }, 'f4', { value: 1, enumerable: true }),
];
let yyy = aa.reduce((acc, e) => {
return {...acc, ...e};
});
console.log(yyy);
请参阅developer.mozilla.org上的 enumerable
更新
来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax:
ECMAScript 提案的 Rest/Spread Properties(第 4 阶段)将扩展属性添加到对象文字。它将自己的可枚举属性从提供的对象复制到新对象上。
推荐阅读
- git - 克隆到 D:\.. 错误:无法生成 C:\..,权限被拒绝致命 [Github 桌面]
- android - Android Studio Canary 不预览 jetpack compose
- r - R软件 - 条形图日志Y比例问题
- angular - 无法验证 Angular 表单
- marklogic - MarkLogic 插入带有选项的文档
- r - dplyr 有条件地仅过滤唯一项目
- flutter - Flutter Web Firestore 错误:预期类型为“((Object?)=> Object)?”,但得到类型“(Object)=> Object?”之一
- join - PySpark 广播连接,其中左表比右表更小以适合内存
- flutter - Flutter:在关闭控制器上处理 HTTP 请求
- c - 一个字符串在一个点正确而在另一个点错误地打印它的内容,没有变化