如何从几个数组创建对象数组

3
例如,
我有两个安排。
关键数组有键。
其余的数组是一个包含多个数组的多维数组,例如[[A],[B],[C],...]
那么我们如何将对象放入一个数组中呢?
let key = [“name”, “age”, “country”];

let values = [["james", "23", "US"],["steve", "20", "UK"], ...]


** expect result **
result = [
    {
        "name": "james",
        "age": 23,
        "country": "US"
    },
    {
        "name": "steve",
        "age": 20,
        "country": "UK"
    },
    ...
]



可以在数组映射中完成,并在其中使用foreach创建要返回的对象。您可以从foreach中访问数组索引,该索引可用于获取keys数组中键的值。 - cmgchess
4个回答

1
如果你有名称、年龄和国家等具有相同键的数据,那么你可以尝试下面的代码,它应该适用于你。
let values = [["james", "23", "US"],["steve", "20", "UK"], ...]
const result = [];

values.forEach(item => {
    const [name, age, country] = item;
    result.push({ name, age, country });
});

console.log(result)

这是具有O(n)时间复杂度的最简洁的方法。 - Randall
如果您不介意硬编码密钥,请使用提供的“keys”数组进行操作,OP已经明确提供了它。 - Simon L

1

使用数组的 mapreduce 函数实现单行代码:

values.map(v=>(key.reduce((acc, k, i) => ({...acc, [k]: v[i]}), {})));

请注意,您原来的问题包含非ASCII引号“” - 您需要使用"进行有效的JS语法。


0

我刚刚向OpenAI JavaScript Codex提出了你的问题,它返回了以下结果。

/* let key = [“name”, “age”, “country”]; */
var key = ["name", "age", "country"];
/* let values = [["james", "23", "US"],["steve", "20", "UK"]] */
var values = [["james", "23", "US"],["steve", "20", "UK"]];
/* So how do we put objects in one array? */
var objects = [];
for (var i = 0; i < values.length; i++) {
  var object = {};
  for (var j = 0; j < key.length; j++) {
    object[key[j]] = values[i][j];
  }
  objects.push(object);
}

我真的不知道它是否有效,但我很好奇它能做什么。你应该试试。

如果它不起作用,请原谅我。谢谢。


0
const objs = values.map(
 (valSet) => 
  Object.fromEntries(
   valSet.map(
    (val,i) => [val,keys[i]]
   )
  )
);

创建入口数组,然后使用this


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