4

假设我想处理集合数组中对象的一些属性x。但是集合可能包含没有此类属性甚至undefined的对象。例如

let array = [
  {x: 1},
  {x: 2},
  {},
  {x: 4},
  undefined
]

这个想法是用默认参数保护我自己免受这种极端情况的影响。让它为0。我试图解决这个问题

array.map(({x: x = 0}) => process(x))

但它在undefined上失败。有没有办法用默认参数和解构来解决这个问题,而无需在 map 函数内编写检查/设置代码?

4

2 回答 2

2

你可以给默认对象一个默认值

array.map(({x : x = 0} = 0) => process(x));
于 2015-11-13T13:54:17.610 回答
1

您可以使用.filterbefore.map来清除所有falsy值,例如null, 0, '',false

array = array
    .filter((el) => el)
    .map(({x: x = 0}) => process(x));

Example

里面有MDN很好的描述

如果未传递任何值或未定义,则默认函数参数允许使用默认值初始化形式参数。

值也是如此null,所以如果你传递null给函数默认值不使用,例如

function test(x = 10) {
    console.log(x);
}

test(undefined); // 10
test();          // 10
test(null);      // null
test(0);         // 0
test('');        // ''

Example

于 2015-11-13T13:40:11.130 回答