gpt4 book ai didi

javascript - 将多个对象传递到数组中

转载 作者:行者123 更新时间:2023-12-02 20:52:01 24 4
gpt4 key购买 nike

我目前正在研究最后一个 FreeCodeCamp 中间算法,并且在将多个对象插入数组时遇到问题。我通过了第一个测试,它是一个数组内带有单个对象的参数,但我在第二个测试中失败了,我需要从传递给它的三个对象的数组参数中返回多个对象。我只返回数组中的最后一个对象

[ { name: 'moon', orbitalPeriod: 2377399 } ];

我相信我已正确设置所有内容。以下是问题的描述:

Intermediate Algorithm Scripting: Map the Debris

Return a new array that transforms the elements' average altitude into their orbital periods (in seconds).

The array will contain objects in the format {name: 'name', avgAlt: avgAlt}. You can read about orbital periods on Wikipedia. The values should be rounded to the nearest whole number. The body being orbited is Earth. The radius of the earth is 6367.4447 kilometers, and the GM value of earth is 398600.4418 km3s-2.

T = 2*pi*sqrt(r^3/GM) where r = earthRadius+avgAlt, which is the distance from midpoint of the earth to the object, and T = Orbital Period

所以我所有的数学似乎都是正确的。 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;
}

以下是测试:

  1. orbitalPeriod([{name : "sputnik", avgAlt : 35873.5553}]) 应返回 [{name: "sputnik", OrbitalPeriod: 86400}]。

  2. orbitalPeriod([{name: "iss", avgAlt: 413.6}, {name: "hubble", avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}]) 应返回 [{名称:“国际空间站”,轨道周期:5557},{名称:“哈勃”,轨道周期:5734},{名称:“月球”,轨道周期:2377399}]

所以我通过了上面的测试 1,但在测试 2 中我只得到了正确的数组的最后一个对象。

我不太确定如何多次传递 Object.assign 。我尝试在声明 const T 后将其传递到 for in 循环中,并将 OrbitalPeriod 插入该循环内,但我只得到一个空数组:

for (let values in orbitalArr) {
orbitalArr[values] = Object.assign(satelliteObject, { orbitalPeriod: T });
orbitalArr.push(satelliteObject);
}

最佳答案

function orbitalPeriod(arr) {
const GM = 398600.4418;
const earthRadius = 6367.4447;


return arr.map(item => {
let T = Math.round(2 * Math.PI * Math.sqrt(Math.pow(earthRadius + item.avgAlt, 3)/GM));
return {name:item.name, orbitalPeriod:T}
});
}

console.log(orbitalPeriod([{name: "iss", avgAlt: 413.6}, {name: "hubble", avgAlt: 556.7}, {name: "moon", avgAlt: 378632.553}, {name : "sputnik", avgAlt : 35873.5553}]))

可以通过返回映射数组来解决。 Array.map(item => {}) 返回一个根据箭头函数转换的新数组。

关于javascript - 将多个对象传递到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61582589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com