【发布时间】:2020-05-03 22:42:14
【问题描述】:
我目前正在研究最后一个 FreeCodeCamp 中间算法,我遇到了将多个对象推入数组的问题。我通过了第一个测试,这是一个在数组中带有单个对象的参数,但是我没有通过第二个测试,我需要从传入的数组参数中返回多个对象,并带有三个对象。我只返回数组中的最后一个对象
[ { name: 'moon', orbitalPeriod: 2377399 } ];
我相信我已经正确设置了所有内容。问题描述如下:
中间算法脚本:映射碎片
返回一个新数组,将元素的平均高度转换为它们的轨道周期(以秒为单位)。
数组将包含格式为 {name: 'name', avgAlt: avgAlt} 的对象。 您可以在 Wikipedia 上阅读有关轨道周期的信息。 这些值应四舍五入到最接近的整数。被环绕的物体是地球。 地球半径为6367.4447公里,地球GM值为398600.4418 km3s-2。
T = 2*pi*sqrt(r^3/GM) 其中r = earthRadius+avgAlt,即地球中点到物体的距离,T = 轨道周期
所以我所有的数学似乎都是正确的。 T,这是我试图返回的轨道周期,正在返回我期望的值。我相信我的问题是我正在为我的satelliteObject 对象分配一个新值,我按照指示删除了avgAlt,并将orbitalPeriod calc 添加到satelliteObject,但它只是被添加到最后一个第二次测试的值。
我的代码:
function orbitalPeriod(arr) {
const GM = 398600.4418;
const earthRadius = 6367.4447;
let satelliteObject;
let satObjectValue;
let orbitalArr = [];
const mapObjects = Object.entries(arr.map(item => item));
for (let values in mapObjects) {
satelliteObject = arr[values];
satObjectValue = satelliteObject.avgAlt;
delete satelliteObject.avgAlt;
}
const radius = earthRadius + satObjectValue;
//T = Orbital Period
const T = Math.round(2 * Math.PI * Math.sqrt(Math.pow(radius, 3)/GM));
Object.assign(satelliteObject, { orbitalPeriod: T });
orbitalArr.push(satelliteObject);
return orbitalArr;
}
这里是测试:
orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]) 应该返回 [{name: "sputnik", orbitalPeriod: 86400}]。
orbitalPeriod([{name: "iss", avgAlt: 413.6}, {name: "hubble", avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}]) 应该返回 [{ name : "iss", orbitalPeriod: 5557}, {name: "hubble", orbitalPeriod: 5734}, {name: "moon", orbitalPeriod: 2377399}]
所以我通过了上面的测试 1,但我只在测试 2 中得到了正确的数组的最后一个对象。
我不太确定如何多次传递 Object.assign。在声明 const T 并将 orbitalPeriod 推入该循环后,我尝试在 for in 循环中传递它,但我只得到一个空数组:
for (let values in orbitalArr) {
orbitalArr[values] = Object.assign(satelliteObject, { orbitalPeriod: T });
orbitalArr.push(satelliteObject);
}
【问题讨论】:
标签: javascript arrays algorithm object