朋友们,我需要帮助来弄清楚如何使用多个对象,否则我会完全困惑,不明白做什么以及如何做。所以,我有一个对象:
let HERO = {
name: '',
age: 0,
gender: 0,
}
还有另一个对象:
let PARTY = {
qualyty: [],
men: 0,
woman: 0,
}
PARTY.qualyty[0] = HERO;
问题是,如何才能在将PARTY.qualyty对象添加到数组时,根据对象的属性自动计算HERO参数?我创建了一个执行计算的函数,但我不知道将它放在哪里,以便它在向数组添加新元素时自动工作并重新计算:PARTY.manPARTY.womangenderHERO
function Counter() {
var result = 0;
for (var i = 0; i < PARTY.qualyty.length; i++) {
if (PARTY.qualyty[i].gender == 1) {
result = result + 1;
}
return result;
}
如何实施?这样您就不必在每次添加新对象时都调用该 HERO函数PARTY.qualyty?
=====
考虑到您的提示和澄清,我提出了以下目标:
let PEOPLE = {
gender: 0,
fraction: 0,
race: 0,
age: 0,
socialStats: 0,
work: 0,
};
let CASTLE = {
social: {
peopleTotal: [],
freeMen: 0,
freeFemale: 0,
slaveMen: 0,
slaveFemale: 0,
children: 0,
happy: 100,
addPeople(people) {
console.log('people', people);
if (CASTLE.social.peopleTotal.length > 0) {
for (var i = 0; i < CASTLE.social.peopleTotal.length; i++) {
if (people.gender == 0 && people.socialStats == 1) {
CASTLE.social.freeMen += 1;
} else if (people.gender == 0 && people.socialStats == 0) {
CASTLE.social.slaveMen += 1;
} else if (people.gender == 1 && people.socialStats == 1) {
CASTLE.social.freeFemale += 1;
} else if (people.gender == 1 && people.socialStats == 0) {
CASTLE.social.slaveFemale += 1;
}
}
}
}
},
laws: {
taxes: 0,
slavery: 0,
drinking: 0,
}
};
但是,当我尝试将 PEOPLE 对象分配给 CASTLE.social.peopleTotal 数组的零元素时,相应的计数器不会更新,也就是说,该函数要么根本不起作用,要么起作用,但不正确:
function getRandom(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min + 1)) + min; //Максимум и минимум включаются
}
CASTLE.social.peopleTotal[0] = Object.assign({}, PEOPLE, { gender: getRandom(0, 1), fraction: getRandom(0, 6), race: getRandom(0, 4), age: getRandom(5, 60), socialStats: getRandom(0, 1), work: 0})
console.log('human: ', CASTLE.social.peopleTotal[0]);
console.log('free male: ', CASTLE.social.freeMen);
console.log('free female: ', CASTLE.social.freeFemale);
console.log('slave man: ', CASTLE.social.slaveMen);
console.log('slave female: ', CASTLE.social.slaveFemale);
在问题的示例中,对象仅存储数据。因此,您需要自己更新所有字段
为了不每次都写这个,把这段代码传给PARTY对象方法就够了
为了使其更加通用,您需要将要添加的对象添加到参数中,并将对 PARTY 对象的引用替换为
this: