2017-03-16 1 views
1

Ich habe folgendes: JedochWie verwenden Sie die Ruhe- und Spreizoperatoren in einer Funktionsdefinition zusammen?

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

, druckt diese

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

aus Aber ich

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

seit

{lol, rofl, lmao} 

produziert die Zeile oben.

Gibt es eine Möglichkeit, die Argumente zu verbreiten, so dass ich dieses Ergebnis erhalten kann?

+1

FWIW ist dies nicht EcmaScript-6. – lonesomeday

+0

@lonesomeday Was? – mhodges

+1

Ich denke, das OP versucht, Objekte dynamisch zu erzeugen, indem man die Short-Hand-Syntax verwendet, die in ES6 zur Verfügung gestellt wird, wobei ich nicht sicher bin, ob es möglich ist oder nicht. – mhodges

Antwort

2

Ich glaube nicht, dass es eine eingebaute Methode dafür gibt, die spread syntax wird nicht funktionieren, wie Sie erwartet haben. Wie auch immer, Sie können Array#reduce Methode verwenden.

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

0

Sie könnten Object.assign und berechneten Eigenschaften verwenden.

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

 
console.log('abc', abc);

0

Sie wie folgt tun können;

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

+0

Warum "neu" vorstellen? – Bergi

+0

@Bergi Weil 'F' keine Fabrik ist und ich nichts vom Konstruktor zurückgebe. Aber ich bin mir ziemlich sicher, dass du etwas in deiner Tasche versteckt hast. Ok, lass es uns sehen. :) – Redu

+0

Ich meine, warum einen Konstruktor überhaupt verwenden? Es sollte * eine Fabrikfunktion sein. – Bergi

Verwandte Themen