我在遍历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,这些元素应该存在。
答案 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