javascript - 将对象属性解构为数组值

标签 javascript typescript

有什么方法可以解构对象并将其属性分配给数组而不是变量?例如:

const obj = { a: 1, b: 2 };

const { a, b } = obj;
const arr = [a, b];

这可行,但它需要将变量重新声明为数组值。

我试过:

const arr = [(const { a, b } = obj)];

但这是一个语法错误。

我对 Object.values 有类似的想法

const arr = Object.values((const { red } = chalk));`

...但这有同样的问题,即无法在表达式中进行解构。

最佳答案

你真正想要的答案是回到过去并使用 the with statement在它(正确地)被认为是邪恶之前:

var obj = { a: 1, b: 2 };
var arr;
with (obj) {
   arr = [a, b];
}

任何现代答案都需要比您想要的更多的输入。一个相对类型安全的让你更接近的答案是使用字符串文字。把这个贴在图书馆里:

function arrayDestruct<T, K extends keyof T>(obj:T, ...keys: K[]): T[K][] {
  return keys.map(k => obj[k]);
}

然后使用它:

const arr = arrayDestruct(obj, 'a', 'b'); // recognized as number[]

您必须键入一些引号,但它有效。 It could even be overloaded to produce tuples ,但我不知道你是否真的足够关心。无论如何,祝你好运!

关于javascript - 将对象属性解构为数组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48709596/

相关文章:

javascript - 在函数中从派生类访问基成员

angular - 使用 Angular Html2pdf 空白

javascript - 我如何获取 HTML 标签内的值并将其绑定(bind)到 aurelia 中的 ts(组件文件)

java - 如何在 GWT 中将 ScrollHandler 绑定(bind)到 body 上?

javascript - jQM POST 表单通过 JS 显示 "Error Loading Page"

javascript - 没有 d3.js 的矩形数组

typescript - 如何输入类似 _.once 的内容

Angular4 Material 输入显示不正确

javascript - 在 Angular 和 rxjs 映射函数中使用类型断言

javascript - 按钮按下效果在 css 中不起作用