首页 > 解决方案 > 在 JavaScrypt 中使用相同的密钥进行解构

问题描述

如果我将limitfrom重命名为limitfrom2,我可以在第二种情况下达到limitfrom,但我不明白如何在不重命名密钥的情况下获得该值。也许我对解构本身做错了。

创建一个对象

const vedPlus = {
transferLegal: {
    stageOne: {
        limitfrom: 0,
        limitUpTo: 60,
        commission: 0
    },
    stageTwo: {
        limitfrom2: 60,
        limitUpTo2: 1000,
        commission2: 29
    },
}

然后我分 4 步进行解构。

const {transferLegal} = vedPlus

const {stageOne, stageTwo} = transferLegal

const {limitfrom, limitUpTo, commission} = stageOne

const {limitfrom2, limitUpTo2, commission2} = stageTwo

创建一个函数

function calc (i) {
if (i >= limitfrom && i <= limitUpTo) {
    return i * commission
} else if (i >= limitfrom2 && i <= limitUpTo2) {
    return i * commission2
} else {
    console.log('error')
}

结果

const price = 71
console.log(calc(price))

有没有办法在不重命名密钥的情况下获得价值?

标签: javascript

解决方案


您可以对两个内部对象使用相同的属性名称,然后在解构时使用const { prop: newName } = source语法分配新的唯一名称以防止冲突。

它可能不会产生最易读的代码,但至少可以做到。

演示:

const vedPlus = {
  transferLegal: {
    stageOne: { limitfrom: 0, limitUpTo: 60, commission: 0 },
    stageTwo: { limitfrom: 60, limitUpTo: 1000, commission: 29 },
  }
}

const { transferLegal } = vedPlus;
const { stageOne, stageTwo } = transferLegal;
const { limitfrom, limitUpTo, commission } = stageOne;
const { limitfrom: limitfrom2, limitUpTo: limitUpTo2, commission: commission2 } = stageTwo;

console.log(limitfrom, limitUpTo, commission);
console.log(limitfrom2, limitUpTo2, commission2);


推荐阅读