#javascript #ecmascript-6 #ecmascript-5 #ecmascript-2016
#javascript #ecmascript-6 #ecmascript-5 #ecmascript-2016
Вопрос:
Я пытаюсь использовать функцию, которая работает для двух сценариев, она может либо выполнять итерацию по ключу объекта в массиве, либо по самому значению массива. Так что это печатается нормально:
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
Ответ №1:
Я не думаю, что есть хороший способ сделать это только в списке параметров. Вы можете разрушить первую строку функции и присвоить значение по умолчанию всему элементу:
const arr2 = ['audi', 'bmw'];
arr2.forEach((item) => {
const { car = item } = item;
console.log(car);
});
Обратите внимание, что, поскольку вы не создаете новый массив, а выполняете side-effects ( 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
идентификатор.
Комментарии:
1. Да, я знаю, я на самом деле использую reduce для реальной функции, это был пример, но вы правы.
2. Спасибо, это отлично работает, я объявлю переменную в теле.