在多种条件下分配短路评估的最简洁方法

Cleanest way to assign with short circuit evaluation on multiple conditions

我正在尝试根据客户手头的数据构建一个 JSON 对象。

理想情况下,它会 select 地址数据(如果可用),然后是购物车数据(如果不可用),否则为空。

这里的数据是从localStorage中获取的,但是我运行遇到了问题,addressescart解决了null.

时的以下错误

Cannot read property 'length' of null

Cannot read property 'idShipTo' of undefined

let cart = JSON.parse(localStorage.getItem('shopping-cart'));
let addresses = JSON.parse(localStorage.getItem('customer-address'));

this.request = {
  address: {
    shipToAddLine: addresses[0].shipToAddLine || cart.shipToAddLine || null,
    shipToCityStZip: addresses[0].shipToCityStZip || cart.shipToCityStZip || null
  }
}

我想使用类似三元运算符的东西,但要使用多个 if / else 值。

this.request = {
  address: {
    shipToAddLine: (addresses) ? addresses[0].shipToAddLine || (cart) ? cart.shipToAddLine || null,
    shipToCityStZip: (addresses) ? addresses[0].shipToCityStZip || (cart) ? cart.shipToCityStZip || null
  }
}

这是否可以在 JS 中使用干净的(单行)语法,或者我是否必须将赋值放在 if / else 块中?

let shipToAddLine;
if (addresses) shipToAddLine = addresses[0].shipToAddLine;
else if (cart) shipToAddLine = cart.shipToCityStZip;
else shipToAddLine = null;

等...

您可以链接三元运算符

    shipToAddLine: addresses ? addresses[0].shipToAddLine : (cart ? cart.shipToAddLine : null),

如果不存在,您可以使用将其初始化为适当的空值

let cart = JSON.parse(localStorage.getItem('shopping-cart')) || {};
let addresses = JSON.parse(localStorage.getItem('customer-address')) || [{}];

this.request = {
  address: {
    shipToAddLine: addresses[0].shipToAddLine || cart.shipToAddLine || null,
    shipToCityStZip: addresses[0].shipToCityStZip || cart.shipToCityStZip || null
  }
}

如果 cart 为 null,它被初始化为一个空对象,如果 address 最初为 null,它被初始化为一个具有空对象的数组。那么你将不需要在 addresses[0].shipToAddLinecart.shipToAddLine

之前进行检查