javascript - 如何使用嵌套数组在javascript中形成对象,使用第一个数组作为对象,数组的其余部分作为值
问题描述
我得到了一个这样的数组:
data = [
['first_name', 'second_name', 'sex'],
['Jacob', 'David', 'M'],
['Kathryn', 'Gardener', 'F'],
['Jamaal', 'Dave', 'Unknown']
].
解决方案是将数组作为看起来像这样的对象返回:
[
{ first_name: "Jacob", second_name: "David", sex: "M" },
{ first_name: "Kathryn", second_name: "Gardener", sex: "F" }
{....}
];
我写了以下代码:
var object = {};
var arrays = [];
for (i = 0; i < data.length; i++){
for (var j = i; j < data.length; j++){
var keys = data[0][i];
var values = data [j][i];
object[keys] = values;
}
arrays.push(object);
};
但我的输出是:
[
{
first_name :'Jamaal',
second_name : 'Dave',
sex : 'unknown'
},
{
first_name :'Jamaal',
second_name : 'Dave',
sex : 'unknown'
},
{
first_name :'Jamaal',
second_name : 'Dave',
sex : 'unknown'
},
{
first_name :'Jamaal',
second_name : 'Dave',
sex : 'unknown'
}
];
我也尝试了几种方法,要么我最终只能创建一个对象......
解决方案
您需要在第一个循环中使用新对象(引用),否则您会为每一行获得相同的对象。
var data = [ ['first_name', 'second_name', 'sex'], ['Jacob', 'David', 'M'], ['Kathryn', 'Gardener', 'F'], ['Jamaal', 'Dave', 'Unknown']],
result = [],
i, j,
object;
for (i = 0; i < data.length; i++) {
object = {}; // take a new object
for (j = 0; j < data[i].length; j++) { // start from zero
object[data[0][j]] = data[i][j]; // use j as last key
}
result.push(object);
}
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
一个更短的方法Object.fromEntries
。
const
getObjects = ([header, ...data]) => data.map(values =>
Object.fromEntries(values.map((value, index) => [header[index], value])));
var data = [['first_name', 'second_name', 'sex'], ['Jacob', 'David', 'M'], ['Kathryn', 'Gardener', 'F'], ['Jamaal', 'Dave', 'Unknown']],
result = getObjects(data);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- c# - 关于如何在尝试/捕获异常后忽略 for 循环中的文件的任何建议?
- oracle - Oracle Database 12c 中的 WITH 子句增强
- python - 使用本地文件远程运行 python 脚本
- reactjs - 如何在 react-router-dom 中正确定义后备路由
- aem - 我们有一个带有 rte 的多字段并使用了 JSON_STORE。当第二次保存对话框时,我们面临着 href 被删除的问题
- javascript - 从注册表中读取键值
- r - 从数据框中调用变量,其名称存储为字符
- powershell - Powershell 读取一堆日志文件以将计算机添加到 ActiveDirectory 中的组并导出 CSV
- sql - 带有条件的多列上的 CASE WHEN 表达式
- json - 如何在使用 JSON 数据源的 jasper 报告中获取嵌套值作为字段