2017-05-02 10 views
2

のマップ配列はのは、私は5人の名前のリストES6クラス - 変数

let listNames = [Sam, Ash, Moe, Billy, Kenzi]

を持っていると名前の各クラス

を使用して doneHomeWorklazyの性質を持っているために、私がしたいことを言ってみましょう代わりように各名前を割り当てる
class Person { 
    constructor() { 
     this.doneHomeWork = 0 
     this.lazy = false 
    } 
} 

const Sam = new Person() 
const Ash = new Person() 
const Moe = new Person() 
const Billy = new Person() 
const Kenzi = new Person() 

私は、これはそう

無paramは、再割り当てない私ESLintにそれは私にエラーパラメーター 'name' を機能させる

割り当てを与えている、しかしこの

listNames.forEach(name => { 
    name = new Person() 
}) 

をやって考えていました何らかの理由で私はこれを再考することに問題があります。

答えて

1

問題は、name変数がループ内で循環するために使用されることです。 ループの最初の反復でこの値を変更しています。これはあなたのエラーAssignment to function parameter 'name' no-param-reassignの理由です。

次に、変数名として動的名を使用しようとしています。あなたがそれをしたい場合は、方法は、ブラケット表記を使用しているので、あなたは、このような方法でそれを行うことができます:

class Person { 
    constructor() { 
     this.doneHomeWork = 0 
     this.lazy = false 
    } 
} 
let persons = []; 
let listNames = ['Sam', 'Ash', 'Moe', 'Billy', 'Kenzi']; 

correctListNames.forEach(name => { 
    persons[name] = new Person() 
}) 

console.log(persons); 
+0

素晴らしいです!'let persons = {}'を修正したので、配列を挿入するのを避けることができますし、 'correctListNames'は' listNames'でなければなりません。それ以外は、ありがとう! – Alejandro

+0

確実なオブジェクトには同じ記法でアクセスできます。あなたは歓迎です:) – quirimmo

2

あなたはES6アレイな破壊を使用し、それぞれの名前に、Personクラスの新しいインスタンスを割り当てることができます。

class Person { 
 
    constructor() { 
 
    this.doneHomeWork = 0; 
 
    this.lazy = false; 
 
    } 
 
} 
 

 

 
const [Sam, Ash, Moe, Billy, Kenzi] = Array.from(Array(5), e => new Person) 
 

 
console.log(Sam) 
 
console.log(Ash)

+1

ええ、しかし、このようにして、有限の人数を仮定します。さもなければ、この解決策は動的ではなく、適用することができません。私は彼が人の配列を反復し、対応するオブジェクトを作成する方法を知っていたと思う – quirimmo

1

の代わりに、動的にこの

const Sam = new Person(); 
const Randy = new Person(): 

を生成しようとしているあなたは、あなたがpersons['Sam']を使用してそれらにアクセスすることができ、このようなことで似たような、

const persons = { 
    Sam: new Person(), 
    Randy: new Person(), 
}; 

を得ることができますまたはpersons.Sam。あなたは、関数のパラメータの値を変更しようとしているので、今、あなたが取得しているeslintの警告については

const arr = ['Sam', 'Randy']; 
const persons = {}; 
arr.forEach(name => { 
    persons[name] = new Person(); 
}); 

配列、からこれを達成するための です。 eslint設定ファイルでルールを0に設定すると、オフにすることができます。しかし、私はオフにしないことをお勧めします。

0

あなたはこれを達成するためにES6の非構造機能を使用することができます。

class Person { 
 
    constructor() { 
 
     this.doneHomeWork = 0 
 
     this.lazy = false 
 
    } 
 
} 
 
let arr = []; 
 
for(let i=0;i<6;i++) { 
 
\t arr.push(new Person()); 
 
} 
 

 

 
const [Sam, Ash, Moe, Billy, Kenzi] = [...arr]; 
 

 
console.log(Sam);