通过JavaScript对象迭代产生一组对象
我有一个对象数组。其中一个对象是这样的:通过JavaScript对象迭代产生一组对象
obj1 = {
name: 'rich',
email: '[email protected]',
date: {
greg : {
name: 'greg',
id: 1234}
}
}
我怎样才能通过这个数组对象(被称为usersArray)的迭代,并与包含用户的名称为每个对象添加到对象(被称为usersArrayObj)的另一个数组(如富)和其他(如格雷格的名字) 使我最终的结果会是什么样子的下面:
obj1 = {
name: 'rich',
pairName: 'greg',
}
我曾尝试使用hasOwnProperty等等,但他们行为有点古怪.. 。
对于这种情况什么你可以使用的是JS功能Object.keys()
。
obj2= {
name:obj1.name,
pairName: Object.keys(obj1.date)[0]
}
您可以在阵列这样的映射:
var myArray = [
{ name: 'rich', email: '[email protected]', date: { greg: { name: 'greg', id: 1234 } } },
{ name: 'foo', email: '[email protected]', date: { bar: { name: 'bar', id: 5678 } } }
];
var results = myArray.map(function(item) { // For each item in the array
return { // Return an object,
name: item.name, // Using the current item's name
pairName: Object.keys(item.date)[0] // And the first key found on `item.date`
};
});
console.log(results);
欢呼声,这行是干什么的:'pairName:Object.keys(item。日期)[0]'我得到一个错误说:不能将undefined或null转换为对象。 –
为什么我只能做obj1.date.pairName?它不喜欢这样,我得到一个错误,说'不能读取未定义的属性'pairName'即使日期显然存在? –
@蠕虫:关于_“未定义或为空”_:你在'myArray'中输入了什么数据?您设置问题的方式,我的答案应该是正确的。 – Cerbrus
您可以使用Array.prototype.map()
到箱子新的阵列
要选择的对象data
中的第一个关键你可以使用Object.keys()
这将返回给你一个给定的对象自己的枚举数组可调性。然后,您可以选择的第一要素[0]
var usersArray = [{
"name": 'rich',
"email": '[email protected]',
"date": {
"greg": {
"name": 'greg',
"id": 1234
}
}
}, {
"name": 'jason',
"email": '[email protected]',
"date": {
"mickael": {
"name": 'mickael',
"id": 5678
}
}
}];
var usersArrayObj = usersArray.map(function(user) {
return {
"name": user.name,
"pairName": Object.keys(user.date)[0]
}
});
console.log(usersArrayObj);
.as-console-wrapper { max-height: 100% !important; top: 0; }
你可以显示这个数组内的另一个对象吗? –
@Theworm当然,我更新了我的回答 – Weedoze
欢呼声。我接受之前的最后一件事是什么,这行是干什么的:'“pairName”:Object.keys(user.date)[0]'? –
var arr = [{
name: 'rich',
email: '[email protected]',
date: {
greg : {
name: 'greg',
id: 1234}
}
}]
var newArr = [];
for (var i = 0; i < arr.length; i++) newArr[i] = {
name: arr[i].name,
pairName: Object.keys(arr[i].date)[0]
};
JSON.stringify(newArr); // "[{"name":"rich","pairName":"greg"}]"
什么是downvote? –
该解决方案使用ES6。使用Array.prototype.map()
和使用Object.values()
(该浏览器中的链接支持)提取物(内greg:
):
const arr = [{
name: 'rich',
email: '[email protected]',
date: {
greg: {
name: 'greg',
id: 1234
}
}
}];
const result = arr.map(({ name, date }) => ({
name,
pairName: Object.values(date)[0].name
}));
console.log(result);
如何更改代码以符合我的新代码? –
它已更新为您的新代码。你还没有删除'greg:'。 –
那么现在呢? –
'obj1'看起来并不像一个正确的对象字面 – RomanPerekhrest
@NinaScholz: _“**其中一个对象**如下所示:”_ – Cerbrus
是关键“11-28-2016”动态? –