.map() 不要不是打字稿中的函数

.map() don't is not a function in typescript

对象,javascript 中的 {} 没有方法 .map(),它仅可用数据类型为 Array [] 所以我虽然下面的数据格式是正确的,但为什么我不能使用 .map().

我想查询数组数据并使用 .map() 函数获取它的值如下

我收到错误消息:.map() 不是打字稿中的函数

const startDate = [];
const endDate = [];
let query;
query = this.createQueryBuilder("LeaveRequest")
      .where("LeaveRequest.employeeId = :employeeId", { employeeId })
      .getMany();
query.leaveRequest.map(function (leaveRequest) {
      leaveRequest.map(function (values) {
      startDate.push(values.startDate);
      endDate.push(values.endDate);
  });
});
return {startDate, endDate};

数据格式 当我执行 return query; 时,我得到以下格式;

[
  {
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
 },
{
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
},
{
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
}
]

你可以看到图片

你不需要内部地图,只需要这样,

query.map(leaveRequest =>  {
      startDate.push(leaveRequest.createdAt);
      endDate.push(leaveRequest.updatedAt);  
});

DEMO

let query = [
  {
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
 },
{
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
},
{
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
}
];
let startDate = [];
let endDate = [];

 
query.map(leaveRequest =>  {
      startDate.push(leaveRequest.createdAt);
      endDate.push(leaveRequest.updatedAt);  
});
console.log(startDate);

定义query的类型并初始化它,所以即使getMany return的空初始化值也不允许.map()不是函数错误

let query: Array<any> = new Array<any>(size);
如果您已经为数组的 return 结果定义了 class 类型,那么

使用 any 类型是不可取的,然后使用该 class 类型并具有大小对于数组(它是可选的)

如果您没有 return 任何东西,请使用 forEach 而不是 map

forEach() 方法实际上没有 return 任何东西(未定义)。它只是对数组中的每个元素调用提供的函数。

map() 方法将对数组中的每个元素调用提供的函数。不同之处在于 map() 使用 return 值,实际上 return 是一个相同大小的新数组。

let query = [
  {
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
 },
{
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
},
{
    "id": 40,
    "createdAt": "2018-07-23T10:01:49.939Z",
    "updatedAt": "2018-07-23T10:01:49.939Z",
    "createdBy": 1,
    "updatedBy": null,
    "state": 1,
    "version": 1,
    "requestStatus": 1,
}
];
let startDate = [];
let endDate = [];

 
query.forEach(leaveRequest =>  {
      startDate.push(leaveRequest.createdAt);
      endDate.push(leaveRequest.updatedAt);  
});
console.log(startDate);
console.log(endDate);

您上面的所有答案几乎都是正确的,但您可能会忘记 asyncawait 因为当我应用这些时,它的所有属性也都有效。

 async functionName() {
    const startDate = [];
    const endDate = [];
    let query;
    query = await this.createQueryBuilder("LeaveRequest")
          .where("LeaveRequest.employeeId = :employeeId", { employeeId })
          .getMany();
    query.leaveRequest.map(function (leaveRequest) {
          leaveRequest.map(function (values) {
          startDate.push(values.startDate);
          endDate.push(values.endDate);
      });
    });
    return {startDate, endDate};
    }