[英]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);
一些注意事項:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.