如何将嵌套数组对转换为数组中的对象
Posted
技术标签:
【中文标题】如何将嵌套数组对转换为数组中的对象【英文标题】:How to convert nested array pairs to objects in an array 【发布时间】:2017-03-25 09:07:46 【问题描述】:我的任务是将以下数组转换为对象对数组:
var arr = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk'],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
]
]
我需要将arr
转换为如下所示的对象数组:
[
firstName: 'Joe', lastName: 'Blow', age: 42, role: 'clerk',
firstName: 'Mary', lastName: 'Jenkins', age: 36, role: 'manager'
]
【问题讨论】:
请把你付出的努力和你想要的输出 输出格式是什么? 你想要这样 - var arr = ['firstName':'Joe','lastName':'Blow','age':42,'role':'clert', 'firstName':'Mary','lastName':'Jenkins','age':36,'role':'manager'] 提及您尝试过的内容,所需的输出是什么。此外,格式化问题,添加代码块。 arr 缺少一个 ']' 【参考方案1】:程序化解决方案(也可在https://jsfiddle.net/edorka/jnLxyzhb/ 获得):
var arr = [[ ['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk']], [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager'] ]];
var empty = ;
var result = arr.map(function(objectArray)
var object = this;
var attribute = objectArray.map(function(attrArray)
var name = attrArray[0], value = attrArray[1];
object[name] = value;
return object;
, object);
return this;
, empty);
console.log(result);
【讨论】:
【参考方案2】:你可以这样转换 -
var arr = [
'firstName':'Joe','lastName':'Blow','age':42,'role':'clert',
'firstName':'Mary','lastName':'Jenkins','age':36,'role':'manager'
]
【讨论】:
这和他们发布的有什么区别?这如何帮助他们实现这一目标?这似乎是对他们所说的他们想要的东西的重申,加上一些引号【参考方案3】:对象数组示例
var arr = [
'firstName' : 'Joe',
'lastName' : 'Blow',
'age' : 42,
'role' : 'clerk'
,
'firstName' : 'Mary',
'lastName' : 'Jenkins',
'age' : 36,
'role' : 'manager'
];
【讨论】:
【参考方案4】:您可以对嵌套数组使用迭代和递归方法。
var array = [[['firstName', 'Joe'], ['lastName', 'Blow'], ['age', 42], ['role', 'clerk'], [['firstName', 'Mary'], ['lastName', 'Jenkins'], ['age', 36], ['role', 'manager']]]],
result = [];
array[0].forEach(function iter(a, i)
i || result.push();
if (i < 4)
result[result.length - 1][a[0]] = a[1];
return;
Array.isArray(a) && a.forEach(iter);
);
console.log(result);
.as-console-wrapper max-height: 100% !important; top: 0;
【讨论】:
不知道嵌入式sn-ps,感谢您的回复。但是恕我直言,我看到您的解决方案受到属性数量(四个)的限制,但这缺乏弹性,我的意思是,如果 i == 2 那么它是一个名称/值元组。 我使用了我拥有的数据,看起来前四个元素应该是对象的一部分。 这就是我能想到的 它确实有效,但我认为这不是最有效的解决方案。 如果您提供的数据多于上述数据,我可以优化提案。【参考方案5】:function convert(array)
return array.map(function(person)
return person.reduce(function(obj, prop, index)
if (!obj[prop[0]])
obj[prop[0]] = prop[1];
return obj;
, );
);
使用地图功能选择每个“人”数组
使用 reduce 函数将每个“人”数组转换为对象
map 函数还将返回一个新的对象数组
原始数组不会改变
【讨论】:
【参考方案6】:如果您格式化您的代码,您首先会看到末尾缺少 1 个右大括号 ']'。而你的结构是这样的
var arr = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk'],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
]
]
我想你想做这样的事情
var arr = [
[
['firstName', 'Joe'],
['lastName', 'Blow'],
['age', 42],
['role', 'clerk']
],
[
['firstName', 'Mary'],
['lastName', 'Jenkins'],
['age', 36],
['role', 'manager']
]
];
但我会建议你这样做
var arr = [
'firstName': 'Joe',
'lastName': 'Blow',
'age': 42,
'role': 'clerk'
,
'firstName': 'Mary',
'lastName': 'Jenkins',
'age': 36,
'role': 'manager'
];
【讨论】:
请放弃反对票的评论。所以我可以找到我错的地方以上是关于如何将嵌套数组对转换为数组中的对象的主要内容,如果未能解决你的问题,请参考以下文章
如何将嵌套的 JSON 对象转换为数组 Spring Boot?
如何根据 Aurelia/Typescript 中的嵌套属性对对象数组进行排序