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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18591092/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-27 12:30:22  来源:igfitidea点击:

how to create Object key & value in JavaScript dynamically from array string

javascriptdynamicjavascript-objects

提问by Neerav Shah

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

我想从两个字符串数组动态创建一个 JavaScript 对象。一个数组用于键,另一个用于值。例如它应该创建 * element.name="xyz"; *等等

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

回答by simdrouin

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

回答by Vlad Bezden

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

您可以使用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)

回答by Andy

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