Reputation: 743
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";
Upvotes: 3
Views: 18369
Reputation: 11244
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);
}
Upvotes: 0
Reputation: 89527
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)
Upvotes: 4
Reputation: 63524
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);
Upvotes: 0
Reputation: 1018
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);
}
Upvotes: 8