2016-10-17 5 views
0

를 사용하여 짧은 코드의 블록을 쓸 수 있습니까? 나는 이것을 시도했지만 틀렸어.는 내가 코드 블록을 ES6/ES7

가능합니까?

+2

:

const obj = { location: ({address, cityDistrict, city, country} = data) }; console.log(address, cityDistrict, city, country); // All defined 

당신이 정말로 원하는 것은 개체의 새 인스턴스를 만들 수 Object.assign을 사용하는 것입니다 이 위치와 같은 것을해야 할 것입니다. {address : data.address, cityDistrict : data.cityDistrict, city : data.city, country : data.country} ... ... – evolutionxbox

+0

크롬? 특별히 귀하의 오류가 무엇입니까? 브라우저 특정 있습니까? – ste2425

+0

저를 위해 일합니다, 당신은 그것을 무엇에 시험하고 있습니까? – Undefined

답변

0

이것은 es2015 사전 설정을 사용하여 작동하지 않지만 es2016을 사용하여 작동합니다.

이것을 시도하면 https://babeljs.io/repl입니다. 이 하나가 작동하지 않는 이유를 업데이트

answer from CodingIntrigue

을 보여줍니다.

은 또한 당신이 원하는 것은 이 한 줄을 destructuring와 현재 달성하지 생각합니다. 실제로에 변수 할당을 원하지 않는 한 첫 번째 의도에 더 충실해야합니다. 그런 경우 IIFE 키를 필터링하는 것이 좋습니다.

const obj = {location: Object.assign({}, data)} 

또는도 : zeroflagl 말했다

으로 데이터를 복사 할 경우 당신이 그것을 사용할 수 있습니다 ES의 제안 단계 3.

const data = { 
    address: 'address', 
    cityDistrict: 'district', 
    city: 'city', 
    country: 'country' 
} 
const { address, cityDistrict, city, country } = data; 

const obj = { 
    location: {...data} 
}; 

console.log(obj) 

/* logs Object { 
    "location": Object { 
    "address": "address", 
    "city": "city", 
    "cityDistrict": "district", 
    "country": "country" 
    } 
} 
*/ 
+0

예상되는 동작을 확신 할 수 없습니다 - 두 개의 사전 설정 플러그인간에 서로 다른 구문 분석 기술의 부작용이있을 수 있습니까? – CodingIntrigue

+0

당신은 맞습니다. 코딩 의향이 있습니다. 그리고 당신의 '예상치 못한 데이터를 얻습니다. 그것의 부작용으로, 범위에서 4 개의 새로운 변수를 얻게 될 것입니다. 우리가 할 수있는 최선의 방법은'data'를 매개 변수로 사용하여 키를 필터링하는 즉각적으로 호출되는 함수 표현식이라고 생각합니다. 그러나 결과는 원래 코드보다 이해하기 쉽지 않습니다. – damienc

+1

_ "당신이 원하는 것은 destructuring one-liner로는 달성 할 수 없습니다."_ 데이터에 추가 속성이 없습니다 : 위치 : {... 데이터}. 3 단계 제안. – zeroflagL

0

를 사용하는 경우, 당신은 spread properties를 사용하여 작업을 수행 할 수 있습니다 다음 코드를 사용할 수 있지만 obj.location을 변경하면 데이터가 변경 될 수 있습니다.

const obj = {location: data} 
4

(Chrome에서 적어도 괄호 안에 과제를 래핑하는 경우 Babel에서도) 두 코드는 동일하지 않습니다..

코드의 두 번째 부분은 단순히 location 속성 data을 할당하고, addresscityDistrict라는 범위에서 4 개 개의 새로운 변수 등 예컨대

작성 올바른 기록 같이

const data = { 
    address: "Address", 
    cityDistrict: "District", 
    city: "City", 
    country: "Country" 
} 

const obj = { 
    location: ({address, cityDistrict, city, country} = data) 
}; 
console.log(obj); 

보이는 데이터이지만 실제로 인쇄되는 것은 data, 새 개체가 아닙니다입니다. 따라서 다음과 같이하면 :

const obj = { 
    location: ({address, cityDistrict, city, country} = data) 
}; 

data.address = "Test" 

console.log(obj); // location.Address = Test 

예기치 않은 데이터가 발생합니다.그 부작용으로, 당신은 또한 범위에 4 개 개의 새로운 변수를 얻을 것 :

const obj = { 
    location: Object.assign({}, data); 
} 
+0

안녕하세요! 대답 해 주셔서 감사합니다. 그러나'data.assign ({}, data)'를 쓰지는 못합니다. 왜냐하면'data '안에 많은 미사용 데이터가 있기 때문입니다. – rel1x

+0

@ rel1x 알아요. 나는 보통 [lodash.pick] (https://www.npmjs.com/package/lodash.pick) 또는 [이 기본 구현]을 사용합니다 (http://stackoverflow.com/questions/25553910/one-liner-to- take-some-properties-object-in-es-6) – CodingIntrigue

관련 문제