变量中具有属性名称的Javascript对象析构函数



是否可以使用存储在变量中的属性名来破坏Javascript中的对象?

这就是我们目前的破坏方式。

const myObject = {a: 1, b: 2, c: 3};
let {a, b, c} = myObject;
console.log(a, b, c);

我希望能够将属性名称存储在变量中:

const myObject = {banana: 1, apple: 2, strawberry: 3};
const chosenFruit = "banana";
const { [[chosenFruit]], ...theRest } = myObject;
console.log(banana); // Should be 1

为了充分披露,我想这样做的原因是我想删除";香蕉;来自对象。因此,在我的用例中,我希望只剩下theRest对象,它不包括banana属性,但有时我希望迭代一组值(例如,一周中的几天(,并通过程序快速销毁对象。

这可能吗?如果是,如何?

谢谢!

您可以使用计算出的属性名称并重命名该属性(分配给新的变量名称(。

const myObject = { banana: 1, apple: 2, strawberry: 3 };
const chosenFruit = "banana";
const { [chosenFruit]: fruit, ...theRest } = myObject;
console.log(fruit); // 1
console.log(theRest);

const myObject = {banana: 1, apple: 2, strawberry: 3};
const chosenFruit = "banana";
const newThing = { ...myObject };
delete newThing[chosenFruit];
console.log(myObject, newThing);

此版本使用解构主义进行克隆,然后删除不需要的属性。

具有析构函数参数的变体:

const pick = (fruit, {[fruit]: out, ...fruits}) => [out, fruits];
const [fruit, fruits] = pick('banana', basket);
console.log(fruit);
console.log(fruits);
console.log(basket);
<script>const basket = { banana: 1, apple: 2, strawberry: 3 };</script>

这也适用于非动态选择,如果您希望变量名称与水果名称相同

const myObject = { banana: 1, apple: 2, strawberry: 3 };
const { banana, ...theRest } = myObject;
console.log(banana); // 1
console.log(theRest);

最新更新