在TypeScript中迭代多维数组

时间:2019-05-12 16:59:08

标签: typescript multidimensional-array iteration

我在遍历TypeScript中的多维数组时遇到麻烦。为了将数据存储到db中,我需要将多维数组转换为一维数组。

我的功能:

storeDevices() {
    let tempDeviceList: Device[][] = this.dataStorageService.getDevices();
    console.log(tempDeviceList);
    console.log(tempDeviceList[1]);
    console.log(tempDeviceList[1][1]);
    console.log(tempDeviceList.length);
  }
console.log(tempDeviceList);

产生https://pastebin.com/mb2B9yrM 我将其用作查找表,这就是为什么第一个元素通常为null的原因。

我不明白为什么

    console.log(tempDeviceList[1]); //undefined
    console.log(tempDeviceList[1][1]); //undefined
    console.log(tempDeviceList.length); //0

导致undefined和0。因此,我无法遍历数组。根据打印的JSON,这些元素应该存在。

2 个答案:

答案 0 :(得分:0)

将多维数组转换为一维数组也称为数组展平here's one on SO上有很多有关此主题的资源,可以帮助您入门。

答案 1 :(得分:0)

const data = [
  null,
  [
    null,
    {
      "deviceID": 1,
      "deviceType": 1,
      "updateFrequency": 1,
      "lastUpdate": 1557679860000,
      "payload": [
        22,
        31,
        32
        .... rest of your array data

然后您可以创建一个Util类:

class Utils {
  public flatten(arr: any[]): any[] {
    // in node 11+, FF and Crome: 
    // return arr.flat();
    return [].concat(...arr);
  }

  // Use if you want to exclude null, undefined
  // or any falsey value from final array
  public compact(arr: any[]): any[] {
    return arr.filter(Boolean);
  }
}

const utils = new Utils();
const tempDeviceList = utils.compact(utils.flatten(data));


console.log(tempDeviceList[1]); // {deviceID: 2....
console.log(tempDeviceList.length); // 16

http://www.javazoom.net/mp3spi/documents.html