函数的默认解构参数

Default descontructed parameter on function

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

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

我认为仅在参数列表中没有执行此操作的好方法。可以在函数的第一行解构,给整项赋一个默认值:

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 标识符中。