0

I have an array of objects that I would like to simplify to make it easy to search/filter when put in a table. I'm trying to take this multi-dimensional array and push it into a single dimension array. I'm able to pull the first level out, but I keep getting undefined for the keys in below details. The code I have is clearly not working, but it is returning close to the amount of values I need at least. Any ideas?

var transferArray = [{
  "transferCode": "1041",
  "details": [{
    "vendor": ["AL", "PA", "TX"],
    "voucherNumber": ["123", "456", "789"],
    "description": ["test", "test1", "test2"],
    "amount": [543, 768, 123]
  }]
},
{
  "transferCode": "23421",
  "details": [{
    "vendor": ["CA", "AK", "SD", "WA"],
    "voucherNumber": ["1213", "4896", "769", "765"],
    "description": ["test", "test1", "test2", "test3"],
    "amount": [53,468, 903, 2134]
  }]
}]

//the structure I'd like
[{
  "transferCode": "1041",
  "vendor": "AL",
  "voucherNumber": "123",
  "description": "test",
  "amount": 543
},
{
  "transferCode": "1041",
  "vendor": "PA",
  "voucherNumber": "456",
  "description": "test1",
  "amount": 768
}]

//JS I tried but can't get working. It's just returning undefined for vendor, voucherNumber, description, and amount

var newTransferArray = [];
transferArray.forEach(function(sTransferCode) {
    transferArray.forEach(function(oDetails) {
        newTransferArray.push({
            transferCode: sTransferCode.transferCode,
            vendor: oDetails.vendor,
            voucherNumber: oDetails.voucherNumber,
            description: oDetails.description,
            amount: oDetails.amount
        })  
    })
})
console.log(newTransferArray)
2

3 Answers 3

1

I hope this helps and what u need.

var newArray = [];
for(i = 0; i < transferArray.length; i++){
    var obj = transferArray[i];
    for(x = 0; x < obj.details[0].vendor.length; x++){
       var tempObj = {};
       tempObj["transferCode"] = obj.transferCode;
       tempObj["vendor"] = obj.details[0].vendor[x];
       tempObj["voucherNumber"] = obj.details[0].voucherNumber[x];
       tempObj["description"] = obj.details[0].description[x];
       tempObj["amount"] = obj.details[0].amount[x];
       newArray.push(tempObj);
    }
}
console.log(newArray);
Sign up to request clarification or add additional context in comments.

Comments

1

Just collect every data for the specified index of the inner arrays.

var transferArray = [{ "transferCode": "1041", "details": [{ "vendor": ["AL", "PA", "TX"], "voucherNumber": ["123", "456", "789"], "description": ["test", "test1", "test2"], "amount": [543, 768, 123] }] }, { "transferCode": "23421", "details": [{ "vendor": ["CA", "AK", "SD", "WA"], "voucherNumber": ["1213", "4896", "769", "765"], "description": ["test", "test1", "test2", "test3"], "amount": [53, 468, 903, 2134] }] }];

function newArray(data) {
    var array = [];
    data.forEach(function (item) {
        item.details.forEach(function (detail) {
            var keys = Object.keys(detail),
                length = keys.reduce(function (r, a) { return Math.max(r, detail[a].length); }, 0),
                object, i;
            for (i = 0; i < length; i++) {
                object = { transferCode: item.transferCode };
                keys.forEach(function (k) {
                    object[k] = detail[k][i];
                });
                array.push(object);
            }
        });
    });
    return array;
}

document.write('<pre>' + JSON.stringify(newArray(transferArray), 0, 4) + '</pre>');

1 Comment

This answer looks more valuable and appreciable!
-1

should do the trick

 transferArray.map(function(it) {

  var mrgd = Object.assign({},it, it.details[0]);
  delete mrgd.details;
  res.push(mrgd);

});

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.