是否可以使用存储在变量中的属性名来破坏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);