3

I want to create a JavaScript object dynamically from two arrays of strings. One array is used for the key and another for the value. e.g. it should create *element.name="xyz";*etc

 var key=["name","id","surname"];
 var value=[["xyz","01","abc"],["def","02","ghi"]]; 
 var element=new Object();

from the above value it should create an object like this:

    var element=new Object();
    element.name="xyz";
    element.id="01";
    element.surname="abc";

    var element =new Object();
    element.name="def";
    element.id="02";
    element.surname="ghi";
8
  • need more clarification about your needs Commented Sep 3, 2013 at 11:30
  • Would element be an object or an array of objects? because your value object holds an array of 2 "objects" Commented Sep 3, 2013 at 11:36
  • It looks like you are trying to create two objects, or perhaps two objects in an array there. Commented Sep 3, 2013 at 11:37
  • @simdrouin its an array of objects Commented Sep 3, 2013 at 11:37
  • @Andy i want to pass this object to array later Commented Sep 3, 2013 at 11:38

4 Answers 4

8

I would go like this :

var value=[["xyz","01","abc"],["def","02","ghi"]]; // notice it's an array of array instead of an array of objects

var elements = [];

for (var i = 0; i< value.length; i++) {
    var elem = new Object();
    for (var j=0; j< key.length; j++) {
        elem[key[j]] = value[i][j];
    }
    elements.push(elem);
}
2
  • for sanity: j<key.length && j<value[i].length Commented Sep 3, 2013 at 12:09
  • can you help me to solve this problem also stackoverflow.com/q/18584226/2307391 Commented Sep 4, 2013 at 4:25
4

You can use map and reduce functions to get your result. Map will flatten out array of arrays, and reduce will create object for each array

const key = ['name', 'id', 'surname']
const values = [
  ['xyz', '01', 'abc'],
  ['def', '02', 'ghi']
]

const result = values.map(row =>
  row.reduce((acc, cur, i) =>
    (acc[key[i]] = cur, acc), {}))

console.log(result)

0

Similar to the other answers but avoiding the inner loop:

var keys = ["name","id","surname"];
var values = [["xyz","01","abc"],["def","02","ghi"]]; // an array of arrays, not objects

function populateObjects(keys, values) {
  var arr = [];
  for (var i = 0, l = values.length; i < l; i++) {
    var obj = {};
    obj[keys[0]] = values[i][0];
    obj[keys[1]] = values[i][1];
    obj[keys[2]] = values[i][2];
    arr.push(obj);
  }
  return arr;   
}

var arr = populateObjects(keys, values);
console.log(arr);
2
  • However, if there is a new property added to the keys/values objects, you need to modify the populateObjects function Commented Sep 3, 2013 at 11:54
  • Fair point. Question didn't mention that tho. It indicated the objects would be static. Commented Sep 3, 2013 at 11:59
0

Create dynamic object using this

    let featureConfigsData: any = {};
    // let featureConfigsData = new Object();

    if (feature_configs) {
      feature_configs.map((item: any, index: number) => {
        featureConfigsData["" + item.name + ""] = item.value;
      });
      console.log("K_____  ", featureConfigsData);
    }

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.