2016-06-01 2 views
1
나는 보통 그들 필드가 수행하거나이 조건 때문에

건설 개체 참/거짓 조건에 따라

let data 
if(something === true) { 
    data = { 
    name: 'String', 
    something: 'Something' 
    } 
else { 
    data = { 
    name: 'String' 
    } 
} 

에 근거하지 않지만이 할 수있는 매우 "더러운 방법처럼 보인다 객체를 구성하고

이 "데이터가 매번 재정의되어야 할 필요가있을 때 + 조건이 더 많으면 조용한 코드 덩어리가 될 것입니다. 이것을 달성하기위한보다 간결한 방법이 있습니까?

+1

을 선호하는 경우,

let data let something = true data = Object.assign( { name: 'String' }, something && {something: 'Something'} ) console.log(data)

또는 , 나중에 추가하는 것만 추가하면됩니다. 'var data = {name : 'String'}; if (something) {data.something = 'Something'; }'? –

+0

가장 간단한 방법은 data = {}; 그리고 나서 if에서 그냥 data.name = 'String'; data.something = 'Something'etc etc 그러나이 고양이를 껍질을 벗기는 데는 수 많은 방법이 있습니다. –

+2

[JSON 개체] (http://stackoverflow.com/q/2904131/1048572)와 같은 것이 없습니다. 그리고 여기에 JSON이 없습니다 (따옴표가 없습니다). – Bergi

답변

3

개체에 조건부로 속성을 추가하기 만하면 모든 것을 개체 리터럴로 정의 할 필요가 없습니다.

let data = { 
    name: 'String' 
}; 
if (something) { 
    data.something = 'Something'; 
} 
+0

물론, 여기에는 막연하게 불만족스러운 것이 있습니다. –

+0

@ 토라자 부로 : 식별자'data'의 반복은 어쩌면? 나는 당신의 접근법을 좋아하지만 어떤 이유로 나는 아마도 그것을 사용하지 않을 것입니다. – Bergi

0
이 같은 삼항 연산자가 있습니다 사용할 수 있습니다

: undefined가 아닌 기존 개체의 속성에 액세스하려고 할 때 무엇을 얻을 때문에

let data = { 
    name: 'String', 
    something: (something) ? "Something" : undefined, 
} 

실질적으로이 일을해야,
만에 유지 마음에 당신은 개체에 열거 가능한 속성을 추가하고 있습니다.

+0

원래 결과와 다른 점을 알지 못한다면 사용하지 마십시오. – Bergi

+0

@Bergi의 차이점은 속성이 있지만 정의되지 않았거나 다른 것이 있습니까? – maioman

+0

예, 그것이 제가 의미했던 것입니다. 답안에 단락을 추가해야합니다. – Bergi

0

당신은 다음과 같이 비 개체 매개 변수를 무시하기 때문에, Object.assign을 사용할 수 있습니다 : 당신은 왜 먼저 공통 값을 지정하지

something ? {something: 'Something'} : {}