// 编程挑战 #4
/* 朱莉亚和凯特仍在研究狗,这次她们研究的是狗是否吃得太多或太少。 吃得太多意味着狗当前的食物份量比推荐份量大,吃得太少则相反。 吃得适量意味着狗当前的食物份量在推荐份量的正负 10% 的范围内(参见提示)。
- 循环遍历包含狗对象的数组,并为每只狗计算推荐的食物份量并将其添加为新属性到对象中。不要创建新数组,只需循环遍历数组。公式:recommendedFood = weight ** 0.75 * 28。(结果以食物克数表示,体重需以千克为单位)
- 找到莎拉的狗,并将其是否吃得太多或太少记录到控制台。提示:一些狗有多个主人,因此您首先需要在所有者数组中找到莎拉,这有点棘手(故意的)🤓
- 创建一个包含所有吃得太多的狗主人的数组(‘ownersEatTooMuch’),并创建一个包含所有吃得太少的狗主人的数组(‘ownersEatTooLittle’)。
- 为第 3 步中创建的每个数组向控制台记录一条字符串,格式如下:“Matilda and Alice and Bob’s dogs eat too much!” 和 “Sarah and John and Michael’s dogs eat too little!”
- 向控制台记录是否有任何狗正好吃了推荐量的食物(仅 true 或 false)
- 向控制台记录是否有任何狗吃了适量的食物(仅 true 或 false)
- 创建一个包含吃得适量食物的狗的数组(尝试重用第 6 步中使用的条件)。
- 创建一个狗数组的浅拷贝,并按推荐食物份量升序排序(请记住食物份量在数组对象内部)。
提示 1:使用多种不同的工具来解决这些挑战,您可以使用总结讲座来选择其中之一😉 提示 2:在推荐份量的正负 10% 范围内意味着:current > (recommended * 0.90) && current < (recommended * 1.10)。基本上,当前份量应在推荐份量的 90% 到 110% 之间。
测试数据:
const dogs = [ { weight: 22, curFood: 250, owners: [‘Alice’, ‘Bob’] }, { weight: 8, curFood: 200, owners: [‘Matilda’] }, { weight: 13, curFood: 275, owners: [‘Sarah’, ‘John’] }, { weight: 32, curFood: 340, owners: [‘Michael’] } ];
祝你好运😀 */
第一题
dogs.forEach(dog => (dog.recFood = Math.trunc(dog.weight ** 0.75 * 28)));
console.log(dogs);
第二题
const dogSarah = dogs.find(dog => dog.owners.includes('Sarah'));
console.log(dogSarah);
console.log(
`Sarah 目前吃的量为${
dogSarah.curFood > dogSarah.recFood ? '吃的太多了' : '吃的太少了'
}}`
);
第三题
const ownersEatTooMuch = dogs
.filter(dog => dog.curFood > dog.recFood)
.flatMap(dog => dog.owners);
console.log(ownersEatTooMuch);
const ownersEatTooLittle = dogs
.filter(dog => dog.curFood < dog.recFood)
.flatMap(dog => dog.owners);
console.log(ownersEatTooLittle);
第四题
console.log(`${ownersEatTooMuch.join(' and ')}'s dogs eat too much!`);
console.log(`${ownersEatTooLittle.join(' and ')}'s dogs eat too little!`);
第五题
console.log(dogs.some(dog => dog.curFood === dog.recFood));
第六题
console.log(
dogs.some(
dog => dog.curFood > dog.recFood * 0.9 && dog.curFood < dog.recFood * 1.1
)
);
第七题
console.log(dogs.filter(tuijian));
第八题
const dogsCopy = dogs.slice().sort((a, b) => a.recFood - b.recFood);
console.log(dogsCopy);