首页 > 解决方案 > 我可以从节点中的 sqlite3 数据库中获取数组而不是 JSON 数组的结果吗?

问题描述

我对此真的很陌生,我刚刚掌握了 json 数据,我希望它作为一个常规数组

loginAndDetails.get(`SELECT * FROM logTB` , (err,data) => {
   console.log(data)
})

//output might be 1d or 2d
  {
    entry1: 'data1',
    entry2: 'data2',
    .,    
    .,
    entryN: 'dataN'
  }


loginAndDetails.all(`SELECT * FROM logTB` , (err,data) => {
   console.log(data)
})
// alternative output:
  [{
    entry1: 'data1',
    entry2: 'data2',
    .,    
    .,
    entryN: 'dataN'
  },
{
    entry1: 'data1',
    entry2: 'data2',
    .,   
    .,
    entryN: 'dataN'
  }]

但我已经创建了我所有的函数来使用像这样的普通 JS 数组

['data1','data2',...,'dataN'] 

(or) 

[['data1','data2',...,'dataN'],
['data1','data2',...,'dataN']]

那么有没有办法动态转换所有数据,因为有时它可能是一个二维数组,有时它可能是一个一维数组并且可能有“n”个对象

我必须创建一个函数来构建它还是有任何其他方法

标签: javascriptnode.jsarraysjsonsqlite

解决方案


你可以做这样的事情,它会给你一个数组数组。

var finalResult = [];

// checking if data is an array of objects
if (Array.isArray(data)){
    for (var i=0; i < data.length; i++ ){
        console.log(data[i]);
        var result = getFlatArray(data[i]);
        finalResult.push(result);
    }
    console.log(finalResult);
}
else{
    finalResult = getFlatArray(data);
    console.log(finalResult);
}

function getFlatArray(data){
    var result = [];
    for(var j in data){
        result.push([data[j]]);
    }
   return result;
}

但是,如果您想访问您的 JSON 对象,您可以执行以下操作。]

对于 1d:-data.entry1

对于 2d:-data只是一个 javascript 数组,因此您可以使用普通循环遍历它并使用数组索引访问循环内的对象。

for(var i=0; i < data.length; i++){
    // access the data in the loop using array index
    data[i].entry1;
}

推荐阅读