【问题标题】:Default descontructed parameter on function函数的默认解构参数
【发布时间】:2021-03-10 10:54:57
【问题描述】:

我正在尝试使用适用于两种情况的函数,它可以遍历数组中对象的键或数组值本身。所以这打印得很好:

const arr1 = [{
  car: 'audi'
},{
  car: 'bmw'
}]

const printCars = arr1.map(({ car }) => console.log(car))
// audi
// bmw

但是我不知道如何使用同一个函数的默认参数来允许一个简单的数组

const arr2 = ['audi', 'bmw'];

const printCars = arr2.map(({ car }) => console.log(car));
// Obviously car is undefined

我想知道我该怎么做

const arr = ['audi', 'bmw'];
const printCars = arr.map(({ car } = car) => console.log(car));
// audi
// bmw

【问题讨论】:

    标签: javascript ecmascript-6 ecmascript-5 ecmascript-2016


    【解决方案1】:

    我认为仅在参数列表中没有好方法。您可以在函数的第一行解构,并为整个项目分配一个默认值:

    const arr2 = ['audi', 'bmw'];
    
    arr2.forEach((item) => {
      const { car = item } = item;
      console.log(car);
    });

    请注意,由于您不是在创建新数组,而是在执行副作用 (console.log),因此您不应使用.map - 而应使用forEach。 .map 仅适用于需要将一个数组的每个元素转换为不同返回数组中的新元素时。

    可能仅使用参数列表将正确的值放入 car 变量中,但它非常丑陋并且滥用默认参数,我将其放在下面以供参考仅用于目的(请不要使用它):

    const arr2 = ['audi', 'bmw'];
    
    arr2.forEach((item, i, arr, { car = item } = item) => console.log(car));

    上面的方法是可行的,因为forEach 只需要 3 个参数,所以第 4 个参数是 undefined,所以你可以使用默认参数有条件地在 car 标识符中放入一些东西。

    【讨论】:

    • 是的,我知道,我实际上是在真正的函数上使用reduce,这是一个例子,但你是对的。
    • 谢谢,效果很好,我会在正文上声明变量。
    猜你喜欢
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2014-07-09
    • 1970-01-01
    • 2016-06-05
    • 2010-12-10
    相关资源
    最近更新 更多