중첩 된 배열 / 객체에 상당히 깊은 예상 JSON 페이로드가 있습니다. 가정 된 구조를 기반으로 변수를 할당하므로
{
id: value1,
name: value2,
data: {
status: complete,
date: 2020 - 06 - 20,
notes: {
field1: "user notes",
field2: "more user notes"
}
}
}
내 코드에서 다음과 같이 호출합니다.
var usernote = payload.data.notes.field1 || "No Notes"
그러나 사용자가 메모를 제기하지 않았을 수 있으므로 메모 개체가 정의되지 않은 것으로 반환됩니다. 계단식 기본 검사를 수행하지 않고이 문제를 해결하는 방법이 있습니까? 내 전화 중 일부는 다음과 같습니다.
priorityvar = payload.data.form_values["b691"][index]["form_values"]["d54d"]["choice_values"][0]
어떤 도움이라도 대단히 감사하겠습니다. 내 검색에서 비슷한 답변을 찾을 수 없었습니다 (그러나 여기에도 매우 새롭습니다). 또한 Google 스크립트에서 작업 중이므로 ES6 항목을 사용할 수 없습니다.
여러 검사를 피할 수있는 유일한 방법은 Google 스크립트를 사용하고 " ES6 항목을 사용할 수 없습니다 "이므로 try catch
접근 방식 을 사용하는 것 입니다.
그러면 전체 표현식의 유효성을 검사하므로 개체의 개별 키 유효성 검사에 대해 걱정할 필요가 없습니다.
var usernote;
try {
usernote = payload.data.notes.field1;
} catch (error) {
usernote = "No Notes";
}
새로운 ECMA Script 2020은 지난주에 출시되었으며 이제 선택적 연결 이 공식적인 것입니다.
이렇게하면 다음과 같은 값이 있는지 걱정하지 않아도됩니다 undefined
.
var usernote = payload?.data?.notes?.field1 || "No Notes"
문서에서 :
선택적 연결 연산자를 사용하면 체인의 각 참조가 유효한지 명시 적으로 유효성을 검사 할 필요없이 연결된 개체의 체인 깊숙한 곳에있는 속성 값을 읽을 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다