doc pinocchio
doc pinocchio

Reputation: 199

Can I get the result in a Array instead of JSON array from sqlite3 database in node?

I am really new to this and I just got a grasp of json data and I want it as a regular array

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'
  }]

but I have already created all my function to work with a normal JS array like this

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

(or) 

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

so is there a way to convert all the data dynamically because Some times it might be a 2d array some times it might be a 1d array and there might be 'n' number of objects

do I have to create a function to build this or is there any other method

Upvotes: 0

Views: 542

Answers (2)

Simon Young
Simon Young

Reputation: 33

The bulk of the heavy lifting here can be done with Object.values() We can then use a function to treat the 1d and 2d result sets appropriately

const output1d = {col1: 'col1', col2: 'col2', col3: 'col3'};
const output2d = [{r1col1: 'col1', r1col2: 'col2'}, {r2col1: 'col1', r2col2: 'col2'}];

function resultsToArray(resObj) {
  if (Array.isArray(resObj)) {
    return resObj.map((item) => Object.values(item));
  } else {
    return Object.values(resObj);
  }
};

console.log(resultsToArray(output1d));

console.log(resultsToArray(output2d));

Output...

[ 'col1', 'col2', 'col3' ]
[ [ 'col1', 'col2' ], [ 'col1', 'col2' ] ]

Upvotes: 0

Dula
Dula

Reputation: 1412

You can do something like this, it will give you an array of arrays.

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;
}

But if you want to access your JSON objects you can do as follows.]

For 1d:- data.entry1

For 2d:- data is just a javascript array so you can traverse it with a normal loop and access the objects inside the loop with the array index.

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

Upvotes: 1

Related Questions