0

I have three arrays, "lender", "names", "pageNumbers":

var lender = [
    [
        { "name": "IFC", "amount": 50 },
        { "name": "ABC", "amount": 10 }
    ],
    [
        { "name": "DEF", "amount": 40 },
        { "name": "GHI", "amount": 100 }
    ]
]

var names = ["Gary", "Neil", "Luke", "Ben"]

var pageNumbers = [["page 0"], ["page 1"]]

I want to combine these three arrays into one JavaScript object that looks like this:

page 0 = {
    Gary = {
        financiers = {
            name = IFC
        }
    },
    Neil = {
        financiers = {
            name = ABC
        }
    }
}, page 1 = {
    Luke = {
        financiers = {
            name = DEF
        }
    },
    Ben = {
        financiers = {
            name = GHI
        }
    }
}

}

I thought looping over the arrays and assigning them to a predefined object would be the best way to do that:

  //Predefined Object
  var lenderObj = {
    "lenders": {
      [pageNumbers]:{
        [names]: {}
      }            
    }

 //Loop
  for (var j = 0; j < pageNumbers.length;j++) {   
    for (var i = 0; i < names.length; i++) {
      lenderObj.lenders[pageNumbers[j]] = {
        [names[i]]: {
          financiers:lender[j][i]
        }
      }
    }
  }

But I'm not getting the right result, seems to only give me the last name (Ben) and then NULL as the value for 'financiers'. I can't seem to see what is wrong with what I have written. Any help would be great. Thanks.

2
  • 2
    May I ask you why pageNumbers is a two-dimensional array? P.S. you are missing an = in var pageNumbers [["page 0"],["page 1"]] Commented Dec 4, 2020 at 11:51
  • Oops, thanks. pageNumbers is the result of another function that just gives it back multidimensional. I guess it doesn't have to be, if it easier not to be. Commented Dec 4, 2020 at 12:10

2 Answers 2

2

Do it as below -

var lender = [
  [{
      "name": "IFC",
      "amount": 50
    },
    {
      "name": "ABC",
      "amount": 10
    }
  ],
  [{
      "name": "DEF",
      "amount": 40
    },
    {
      "name": "GHI",
      "amount": 100
    }
  ]
];

var names = ["Gary", "Neil", "Luke", "Ben"];

var pageNumbers = [
  ["page 0"],
  ["page 1"]
];
var lenderObj = {
  "lenders": {
  }
}

//Loop
var nameIterator = 0;
for(var i = 0; i < lender.length; i++) {
    lenderObj.lenders[pageNumbers[i]] = {};  
  var lenderItem = lender[i];
  for(var j = 0; j < lenderItem.length; j++) {
    lenderObj.lenders[pageNumbers[i]][names[nameIterator]] = {};
    lenderObj.lenders[pageNumbers[i]][names[nameIterator]].financiers = lenderItem[j];
    nameIterator++;
  }
}
console.log(lenderObj);

Sign up to request clarification or add additional context in comments.

Comments

0

Using forEach and destructuring

var lender = [
  [
    { name: "IFC", amount: 50 },
    { name: "ABC", amount: 10 },
  ],
  [
    { name: "DEF", amount: 40 },
    { name: "GHI", amount: 100 },
  ],
];

var names = ["Gary", "Neil", "Luke", "Ben"];
var pageNumbers = [["page 0"], ["page 1"]];


const output = { lenders: {} };

pageNumbers.forEach(([page], pi) => {
  output.lenders[page] = {};
  lender[pi].forEach(
    ({ name }, li) =>
      (output.lenders[page][names[2 * pi + li]] = { financiers: { name } })
  );
});

console.log(output);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.