如何在解构期间只传递键值对?

时间:2018-01-11 09:53:35

标签: javascript ecmascript-6 destructuring

我有一个定义如下的功能

  function getProperties({
    url, listName, stage,
  }) {
    return {
      url,
      listName,
      currentStage: stage,
    };
  }

如果我将此功能称为

getProperties({
  url: '<URL>',
  stage: '<stage>',
})

它应该返回

{
  url,
  currentStage: stage,
} 

所以基本上我希望函数只返回那些实际作为参数传递给这个函数的值。

1 个答案:

答案 0 :(得分:0)

您可以将stage参数分配给currentStage,如果有[...arguments].pop(),则将arguments分配给局部变量,否则将变量设置为普通对象;检查变量是否包含"stage"属性,如果属性定义为delete属性并将{currentStage}设置为要分配给返回对象的对象

function getProperties({url, listName, stage: currentStage} = {}) {
  const o = [...arguments].pop() || {};
  return Object.assign(o, "stage" in o ? delete o.stage && {
    currentStage
  } : void 0)
}

console.log(getProperties()); // {}

console.log(getProperties({
  url: "<URL>",
  stage: "<stage>",
})); // {"url": "<URL>", "currentStage": "<stage>"}

console.log(getProperties({listName:"<abc>"})); // {"listName": "<abc>"}