【问题标题】:Passing multiple objects into an array将多个对象传递到数组中
【发布时间】: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;    
}

这里是测试:

  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}]) 应该返回 [{ 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


    【解决方案1】:

    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 => {}) 返回一个基于箭头函数变换的新数组。

    【讨论】:

      【解决方案2】:
      function orbitalPeriod(arr) {
        var GM = 398600.4418;
        var earthRadius = 6367.4447;
        for(let item of arr){
          item.orbitalPeriod=Math.round(Math.sqrt( Math.pow(item.avgAlt+earthRadius,3)/ GM)*2*Math.PI);
          delete item.avgAlt;
        }
        return arr;
      }
      

      【讨论】:

        猜你喜欢
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 2016-03-15
        • 2017-01-23
        • 1970-01-01
        • 2013-06-05
        • 2016-11-05
        • 2011-03-19
        相关资源
        最近更新 更多