javascript - Mengenai gelung untuk mencipta tatasusunan objek dan menambah nilai rawak
为情所困
为情所困 2017-06-05 11:13:16
0
1
653

var arr = [ { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' } ]

arr.forEach(o => { o.password =Math.random() })

output :[ { email: '', role: 'normal', password: 0.16326031488429638 },
  { email: '', role: 'normal', password: 0.4941354999549721 },
  { email: '', role: 'normal', password: 0.6802056630925 },
  { email: '', role: 'normal', password: 0.5038916232454755 },
  { email: '', role: 'normal', password: 0.5232000715886489 },
  { email: '', role: 'normal', password: 0.1599782533612224 } ]

当使用 for 创建一个 对象数组

 var obj  = {
    email: '1',
    role: 'normal',
    password: ''
},array=[]

for(let i =0;i<6;i++){
     array.push(function(){
         obj.password = Math.random()
         return obj
     })   
}

output: [ { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 },
  { email: '1', role: 'normal', password: 0.4311454570811686 } ]

Masalah saya ialah dalam tatasusunan objek kedua yang dijana menggunakan for, nilai obj.password tidak diulang

.............

为情所困
为情所困

membalas semua(1)
小葫芦

Sebab

Soalan ini sangat tersembunyi.

obj ialah rujukan. Ini bermakna setiap kali anda tolak ia adalah obj yang sama obj 是引用。 意味着你每次 push 的都是同一个 obj

至于值为什么一直都是一样 是因为 你修改的都是同一个 obj

Mengenai sebab nilai sentiasa sama, ini kerana anda mengubah suai obj yang sama, jadi nilai adalah berdasarkan nombor rawak terakhir.

Cara mengubah suai

var arr = [ { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' },
  { email: '', role: 'normal', password: '' } ]

arr.forEach(e => e.password = Math.random()); 

arr.forEach(console.log);

ScreenShot

🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan