如何从数组字符串动态创建JavaScript对象键和值

3
我希望能够根据两个字符串数组动态创建JavaScript对象。其中一个数组用于键名,另一个数组用于键值。例如,它应该创建*element.name="xyz";*等内容。
 var key=["name","id","surname"];
 var value=[["xyz","01","abc"],["def","02","ghi"]]; 
 var element=new Object();

从上面的值中,应该创建出像这样的一个对象:
    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";

需要更多关于您需求的澄清。 - Anup
看起来你正在尝试创建两个对象,或者在那里创建一个数组中的两个对象。 - Andy
@Andy 我想稍后将这个对象传递给数组。 - Neerav Shah
var value=[{"xyz","01","abc"},{"def","02","ghi"}]; 这是一个对象数组吗?.. {"xyz","01","abc"},{"def","02","ghi"} 这是什么? - Deepak Ingole
它不是一个对象,因为它没有键/值对。它看起来应该是一个数组,但你使用了错误的语法。 - Andy
显示剩余3条评论
4个回答

8
我会这样做:
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);
}

为了保持清醒:j<key.length && j<value[i].length - Emissary
你能帮我解决这个问题吗?链接是http://stackoverflow.com/q/18584226/2307391。 - Neerav Shah

4
您可以使用mapreduce函数来获取结果。Map将平铺数组,而reduce将为每个数组创建对象。

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

与其他答案类似,但避免了内部循环:

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

然而,如果键/值对象中添加了新属性,则需要修改populateObjects函数。 - simdrouin
有道理。但问题没有提到这一点。它表明对象将是静态的。 - Andy

0

使用此方法创建动态对象

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接