2017-03-16 4 views
1

나는 다음과 같은 한 :함수 정의에 나머지 연산자와 스프레드 연산자를 함께 사용하는 방법은 무엇입니까?

const a = (...args) =>{ return {...args}} 
const abc = a('lol', 'rofl', 'lmao'); 
console.log('abc', abc); 

그러나,이

Object {0: "lol", 1: "rofl", 2: "lmao"} 

를 출력하지만

{lol, rofl, lmao} 

가 생산

이후

Object {lol: "lol", rofl: "rofl", lmao: "lmao"} 

예상 위의 줄.

이 결과를 얻을 수 있도록 인수를 전파 할 수있는 방법이 있습니까?

+1

는 FWIW이 -6- ECMA 스크립트 아니다. – lonesomeday

+0

@lonesomeday 무엇? – mhodges

+1

나는 OP가 ES6에서 제공되는 간략 구문을 사용하여 객체를 동적으로 생성하려고 시도하고 있다고 생각하는데, 가능하지 않은지 확실하지 않습니다. – mhodges

답변

2

나는 거기에 어떤 빌드가 있다고 생각하지 않는다. spread syntax은 예상대로 작동하지 않을 것이다. 어쨌든 Array#reduce 방법을 사용할 수 있습니다.

const a = (...args) => args.reduce((obj, v) => (obj[v] = v, obj), {}) 
 
const abc = a('lol', 'rofl', 'lmao'); 
 
console.log('abc', abc);

0

당신은 Object.assign 및 계산 된 속성을 사용할 수 있습니다.

const a = (...args) => args.reduce((obj, v) => Object.assign(obj, { [v]: v }), {}); 
 
const abc = a('lol', 'rofl', 'lmao'); 
 

 
console.log('abc', abc);

0
당신은 다음과 같이 할 수 있습니다

;

function F(...args){ 
 
    args.forEach(a => this[a] = a, this); 
 
} 
 
var abc = new F('lol', 'rofl', 'lmao'); 
 
console.log('abc', abc);

+0

왜 새 소개? – Bergi

+0

@Bergi'F'는 팩토리가 아니므로 생성자에서 아무것도 반환하지 않습니다. 그러나 나는 당신이 당신의 주머니에 숨겨져있는 것을 가지고 있다고 확신합니다. 좋아, 보자. :) – Redu

+0

내 말은, 왜 생성자를 사용하는 것입니까? 그것은 공장 기능이어야합니다. – Bergi