【问题标题】:How to create an array from 1 to N in TypeScript?如何在 TypeScript 中创建从 1 到 N 的数组?
【发布时间】:2020-05-04 15:36:21
【问题描述】:

我要做的是创建一个从 1 到 N 的数组并将其命名为 first_array,然后将其与另一个具有相同长度的数组 (second array) 组合并创建一个新的数组对象,如下所示:

new_array = [
  {
    "name": "first_array[0]",
    "value": second_array[0]
  },
  {
    "name": "first_array[1]",
    "value": second_array[2]
  },
    "name": "first_array[2]",
    "value": second_array[2]

];

【问题讨论】:

  • 那么,到目前为止你有什么?你被困在哪里了?
  • 只需使用for 循环。

标签: arrays typescript converters


【解决方案1】:

如果你想要一个从 1 到 N 的数组,你可以创建一个长度为 N 的新数组,用填充值填充它,然后使用它们的索引填充值 .map

例如:

const n = 10;
const myArray = new Array(n).fill(null).map((_, i) => i + 1);

myArray 的结果:

[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

但是,在这种情况下,如果您只是将它与另一个数组一起使用,那么您似乎不需要该数组。相反,您可以使用其他数组 (second_array) 中的索引作为 "name" 键的值。

像这样:

const newArray = secondArray.map((e, i) => ({
    name: i + 1,
    value: e,
}));

示例案例:

输入

const secondArray = [100, 200, 300];

结果(newArray

[
  { name: 1, value: 100 },
  { name: 2, value: 200 },
  { name: 3, value: 300 }
]

【讨论】:

  • 非常感谢,但我不明白你代码中的e 是什么?
  • emap 的第一个参数)是secondArray 的一个元素。 map 的工作方式是将给定函数应用于当前数组中的每个元素,并返回一个由调用该函数的结果组成的新数组。因此,在底部的示例中,e 在第一次调用时是 100,在第二次调用时是 200,在第三次调用时是 300
  • 只有一个问题。如果我想以字符串而不是整数的形式使用名称键,我应该如何编辑您的代码?我正在尝试使用ngx-charts-line 库绘制我的数组:stackoverflow.com/questions/59791587/…
  • 您可以对每个值调用.toString() 以强制转换为字符串。例如{name: (i + 1).toString(), value: e.toString()}
  • 你可以看看我的另一个问题,我把它的链接? Mybe有更好的方法来解决我的主要问题吗?
【解决方案2】:

首先创建一个具有最大预期元素数的数组。然后将这个空元素数组缩减为合并数组:

let array_1th = [1,2,3,4]
let array_2nd = [5,6,7,8];

let merged = Array(Math.max(array_1th.length, array_2nd.length))
   .fill().map((_, i) => ({ name: array_1th[i], value: array_2nd[i] }));
   
console.log(merged);

上述示例的一个小缺点是会创建两个数组,然后丢弃准备好的空数组。

一个更好的解决方案是使用reduce 直接改变输入数组,以便只创建一个数组:

let array_1th = [1,2,3,4]
let array_2nd = [5,6,7,8];

let merged = Array(Math.max(array_1th.length, array_2nd.length)).fill()
   .reduce((_, __, i, array) => (array[i] = { name: array_1th[i], value: array_2nd[i] }, array), null);
   
console.log(merged);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 2022-01-09
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多