分配给JavaScript中的多个变量

时间:2018-08-15 11:45:56

标签: javascript variable-assignment destructuring

是否可以通过一次调用将对象的属性以某种方式分配给JavaScript中的多个变量?

[

  {
    "id": 2,
    "name": "نوشیدنی",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 11,
        "parentId": 2,
        "name": "نوشابه",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 25,
            "parentId": 11,
            "name": "نوشابه پپسی",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 2,
    "name": "نوشیدنی",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 12,
        "parentId": 2,
        "name": "آبمیوه",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 26,
            "parentId": 12,
            "name": "آبمیوه سن ایچ",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 3,
    "name": "کالای اساسی",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 9,
        "parentId": 3,
        "name": "برنج",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 22,
            "parentId": 9,
            "name": "برنج محسن",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 3,
    "name": "کالای اساسی",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 10,
        "parentId": 3,
        "name": "روغن",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 24,
            "parentId": 10,
            "name": "روغن لادن",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 4,
    "name": "تنقلات",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 13,
        "parentId": 4,
        "name": "چیپس",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 27,
            "parentId": 13,
            "name": "چپیس مزمز",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 4,
    "name": "تنقلات",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 14,
        "parentId": 4,
        "name": "پاستیل",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 28,
            "parentId": 14,
            "name": "پاستیل مزمز",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 5,
    "name": "کنسرو و غذای آماده",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 15,
        "parentId": 5,
        "name": "تن ماهی",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 29,
            "parentId": 15,
            "name": "تن جنوب",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 5,
    "name": "کنسرو و غذای آماده",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 16,
        "parentId": 5,
        "name": "کمپوت",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 30,
            "parentId": 16,
            "name": "کمپوت بهرام",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 6,
    "name": "چاشنی و افزودنی",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 17,
        "parentId": 6,
        "name": "آبمیوه",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 31,
            "parentId": 17,
            "name": "آبمیوه مزمز",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 6,
    "name": "چاشنی و افزودنی",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 18,
        "parentId": 6,
        "name": "زعفران",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 32,
            "parentId": 18,
            "name": "زعفران خراسان",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 7,
    "name": "لبنیات و پروتوئین",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 19,
        "parentId": 7,
        "name": "شیر",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 33,
            "parentId": 19,
            "name": "شیر خسرو",
            "image": "testmy.png"
          }
        ]
      }
    ]
  },
  {
    "id": 7,
    "name": "لبنیات و پروتوئین",
    "image": "test.png",
    "subLevelOne": [
      {
        "id": 20,
        "parentId": 7,
        "name": "ماست",
        "image": "mytest.png",
        "subLevelTwo": [
          {
            "id": 34,
            "parentId": 20,
            "name": "ماست کریم",
            "image": "testmy.png"
          }
        ]
      }
    ]
  }
]

不使用如下所示的单独分配:

function getValues() {
    return {
        first: 1,
        second: 2
    };
}

function convenientAssignment() {
    let first = 0;
    let second = 0;
    {first, second} = getValues(); // <-- How can this be achieved?
    console.log("Values:", first, second);
}

此问题与并发无关。

3 个答案:

答案 0 :(得分:3)

您非常接近,使用object destructuring将对象值转换为变量。

function simultaneous() {
    const {first, second} = getValues(); // <-- et voila!
    console.log("Values:", first, second);
}

在您的示例中,已经声明了变量的位置,您可以执行以下操作:

function convenientAssignment() {
    let first = 0;
    let second = 0;
    ({first, second} = getValues()); // <-- et voila!
    console.log("Values:", first, second);
}

答案 1 :(得分:3)

这几乎是解构的过程作业应该这样做:

  function getValues(){
    返回{
        第一:1
        秒:2
    };
}

让{第一,第二} = getValues();

console.log(first,second);
// 1 2  

答案 2 :(得分:1)

在您的特定情况下,由于您已经声明了第一和第二,因此需要将解构赋值包装在方括号()中,如下所示:

function getValues() {
    return {
        first: 1,
        second: 2
    };
}

function convenientAssignment() {
    let first = 0;
    let second = 0;
    ({first, second} = getValues()); // <-- Note the (...)
    console.log("Values:", first, second);
}

因为{first, second}本身被视为一个块。