【问题标题】:How to get only passed key-value pair during destructuring?如何在解构过程中仅获取传递的键值对?
【发布时间】:2018-06-20 14:35:48
【问题描述】:

我有一个定义如下的函数

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

如果我把这个函数称为

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

它应该返回

{
  url,
  currentStage: stage,
} 

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

【问题讨论】:

  • 您只需要进行几项检查并返回您需要返回的内容。
  • 如果参数列表很大,这将变得乏味。
  • 这个函数还有什么作用?因为如果它只返回道具(如身份函数),那么它没有任何意义。您可以重命名一个没有此功能的参数。
  • 这只是一个例子。这个函数传递了几个这样的参数。该函数的作用是仅当传递的对象包含该键时,才返回具有相同/不同键名的键值对。
  • 解构是不可能的。您应该有一个通用的选择功能,如stackoverflow.com/q/25553910/218196 中所述。

标签: javascript ecmascript-6 destructuring


【解决方案1】:

您可以将stage参数分配给currentStage,如果有arguments,则将[...arguments].pop()分配给局部变量,否则将变量设置为普通对象;检查变量是否包含"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>"}

【讨论】:

    猜你喜欢
    • 2016-05-01
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 2022-01-21
    • 1970-01-01
    • 2012-07-20
    • 2013-03-10
    相关资源
    最近更新 更多