typescript 返回数组的最后10个对象

b4lqfgs4  于 2023-06-07  发布在  TypeScript
关注(0)|答案(2)|浏览(135)

我有一个数组:

myArr= [
  {"name":"John", "schedule": [{"course":"ESL", "hours": 25},{"course": "Math", "hours": 50},{"course": "History", "hours": 75}]},
  {"name":"Julia", "schedule": [{"course":"English", "hours": 20},{"course": "Geography", "hours": 35},{"course": "Math", "hours": 55}]},
  {"name":"Adam", "schedule": [{"course":"Physics", "hours": 15},{"course": "Math", "hours": 50},{"course": "Chemistry", "hours": 60}]}    
];

如果myArr的长度大于2或小于10,则需要返回myArr不变,但如果它大于10则需要返回数组的最后15个对象。
我写了函数,但是数组返回空。

export const slicedData = (schedule:Schedule[], name:string) =>
{
  const result:Schedule[] = [];
  result.push({name, schedule});

  if(result.length>=2 && result.length<=10){
     return result;
  }

  return result.slice(-9);
}

请问我错过了什么?

n8ghc7c1

n8ghc7c11#

正如@jsejcksn在评论中所写的,您应该使用AND(&&)运算符而不是OR(||这保证了该值在2和10之间。
同样,正如@Martijn所注意到的,您正在创建一个只有一个值的数组。如果你已经有了myArr,你应该把它传递给函数并使用它。

export const sliceData = (dataToSlice: []) =>
{

  if(dataToSlice.length>=2 && dataToSlice.length<=10){
     return dataToSlice; // return schedule unchanged
  }
  
  // Otherwise return last 10 element of schedule
  return dataToSlice.slice(-10);
}

如果你没有数组,最好创建一个函数,首先创建你想要的数组,然后调用sliceData
一个小小的改进是传递要返回的最后一个元素的数量:

export const sliceData = (dataToSlice: Schedule[], fromLastElement: number) =>
{

  if(dataToSlice.length>=2 && dataToSlice.length<=10){
     return schedule; // return schedule unchanged
  }
  
  // Otherwise return last n elements of schedule
  return dataToSlice.slice(-fromLastElement);
}
dpiehjr4

dpiehjr42#

我猜问题是你把一个对象推到result中,然后等待整个myArr被返回。此外,在推送时,您检查的是result.length而不是myArr长度。如果你想要数组的最后15个对象,你需要使用-15而不是-9。修改后的代码应该像下面这样。

export const slicedData = (myArr:any[]) =>
{
  if(myArr.length>=2 && myArr.length<=10){
     return myArr;
  }

  return result.slice(-15);
}

相关问题