Итерация многомерного массива в TypeScript - PullRequest
0 голосов
/ 12 мая 2019

У меня возникают проблемы при переборе многомерного массива в TypeScript.Чтобы сохранить данные в БД, мне нужно преобразовать многомерный массив в одномерный.

Моя функция:

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 Я использую это как справочную таблицу, поэтому первый элемент часто равен нулю.

Я не понимаю, почему

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

приводит к неопределенности и 0. Из-за этого яЯ не могу перебрать массив.На основании напечатанного JSON эти элементы должны существовать.

Ответы [ 2 ]

0 голосов
/ 12 мая 2019
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

Подробнее о новом Array.prototype.flat ()

0 голосов
/ 12 мая 2019

Преобразование многомерного массива в одномерный также называется уплощение массива . Есть много ресурсов на эту тему, вот один на SO , чтобы вы начали.

...