如何处理可能具有未定义内部对象的嵌套对象的解构?
例如。
我有一个xhr req,返回String time1 = "09-00 AM";
String time2 = "07-00 PM";
public static void main(String[] args) {
try {
DateFormat df = new SimpleDateFormat("HH:mm:SS");
Date time1 = df.parse("09-00 AM");
Date time2 = df.parse("07-00 PM");
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
sf.format(date);
TimeZone tz1 = TimeZone.getTimeZone("PST");
Date c = shiftTimeZone(date, tz1);
System.out.println("Format : " + new SimpleDateFormat("HH:mm:SS").format(c));
System.out.println(time1 + "" + time2);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
例如:{person: user: {}}
我只对用户部分感兴趣,所以我要破坏。
const xhrResponse = {person: user: 'hi'}}
const {person: {user}} = xhrResponse
然而,如果api返回console.log(user) => 'hi'
我的解构失败了{person: null}
我有一个解决方案,但我觉得可能有一个更优雅的解决方案。
解决方案
Cannot match against 'undefined' or 'null'.
有没有更好的方法来解决这个问题?或者甚至是另一种方式,使用更好的词有时候是意见的同义词:D
更完整的用例:
const handleResponse(res) => res.person ? res : {person: user: {}}
答案 0 :(得分:2)
您也可以为嵌套内容添加默认值:
const handleResponse = ({ person: { user = {}} = {}} = {}) => {
console.log(user);
}
handleResponse({});
(我假设您根据箭头功能使用es6)
edit:sry,仅适用于未定义的值,但如果值为null则不起作用 无论如何,这将留下答案,因为它可能对其他读者有用
答案 1 :(得分:2)
你能用这个吗?
const {user} = xhrResponse.person || {};
对于更新的用例,我想知道这是否可行?
$q.all([
somePromise,
someOtherPromise,
getPersonPromise.then(res => (res.person || {}).user)
]).then(promises => [vm.promise1, vm.promise2, vm.user] = promises);
答案 2 :(得分:1)
就个人而言,我希望清楚地看到我的功能正在接收的参数。
我会选择这个解决方案:
#include<stdio.h>
int main()
{
int arr[2] = {1, 2};
void *ptr = &arr;
ptr = ptr + sizeof(int);
printf("%d\n", *(int *)ptr);
return 0;
}
进行繁琐的解构可以以不可读的代码结束
所以做渐进式解构,对我来说感觉更好。