簡體   English   中英

循環對象javascript

[英]looping array of objects javascript

//loping for objects

const users = [
    {isPremium: false},
    {isPremium: false},
    {isPremium: false},
    {isPremium: false},
    {isPremium: false},
  ]


function setUsersToPremium(users) {
  // users is an array of user objects.
  // each user object has the property 'isPremium'
  // set each user's isPremium property to true
  // return the users array
  for (let key in users) {
    users['isPremium'] = true;
  }
  return users;
}

setUsersToPremium(users);

我的想法是弄清楚如何遍歷對象數組並將其值從false更改為true。 我的這段代碼的結果是

[true, true, true, true, true ]

但是我想做的就是改變每個

[isPremium: true]

我想知道我在做什么使我無法獲得這一價值。

您必須設置為users[key].isPremium = true;

 //loping for objects const users = [ {isPremium: false}, {isPremium: false}, {isPremium: false}, {isPremium: false}, {isPremium: false}, ] function setUsersToPremium(users) { for (let key in users) { users[key].isPremium = true; } //return users; <-- No need to return. You are changing the user variable directly with these code. } setUsersToPremium(users); console.log(users); 


理想的方法是使用forEach代替for/in

 const users = [{isPremium: false},{isPremium: false},{isPremium: false},{isPremium: false},{isPremium: false},]; function setUsersToPremium(users) { users.forEach(o => o.isPremium = true); } setUsersToPremium(users); console.log(users); 

如果不想影響原始數組,則可以使用Object.assign克隆對象。

 const users = [{isPremium: false},{isPremium: false},{isPremium: false},{isPremium: false},{isPremium: false},]; function setUsersToPremium(users) { return users.map(o => { let x = Object.assign({}, o); x.isPremium = true; return x; }); } var newUsers = setUsersToPremium(users); console.log(newUsers); 

您正在為數組使用for..in循環,因此您將獲得該array (1,2,3...)索引array (1,2,3...)

要解決此問題,可以使用for..of循環

function setUsersToPremium(users) {
  for (let user of users) {
    user['isPremium'] = true;
  }
  return users;
}

您可以使用.map創建具有所需結果的新數組。

 const users = [{ isPremium: false }, { isPremium: false }, { isPremium: false }, { isPremium: false }, { isPremium: false }, ] const result = users.map(o => ({ isPremium: true})) console.log(result) 

const users = [{
  isPremium: false
}, {
  isPremium: false
}, {
  isPremium: false
}, {
  isPremium: false
}, {
  isPremium: false
}, ]
function setUsersToPremium(users) {
  // users is an array of user objects.
  // each user object has the property 'isPremium'
  // set each user's isPremium property to true
  // return the users array
  for (let key of users) {
    key.isPremium = true;
  }
  return users;
}

setUsersToPremium(users);

這也是一種不使用任何循環的簡單方法。 因為,你想改變所有的值isPremium對象的屬性,可以將字符串化JSON數組,然后更換false值為true然后解析回一個數組。 就如此容易:

 const users = [ {'isPremium': false}, {'isPremium': false}, {'isPremium': false}, {'isPremium': false}, {'isPremium': false}, ]; var res = JSON.parse(JSON.stringify(users).replace(/false/g,'true')); console.log(res); 

 const users = [ {isPremium: false}, {isPremium: false}, {isPremium: false}, {isPremium: false}, {isPremium: false} ]; /** setUsersToPremium() * param: users, an array of objects * sets each user's isPremium property to true * returns users array **/ function setUsersToPremium() { for (let i = 0, max = users.length; i < max; i++) { users[i].isPremium = true; } } setUsersToPremium(); console.log(users); 

一些注意事項:

  • 無需將用戶對象數組傳遞給函數,該函數也不需要返回此數組即可實現所需的更改。
  • 使用簡單的for循環似乎過時了,但仍然可以正常使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM