2016-11-28 92 views
-1

我有一个对象数组。其中一个对象是这样的:通过JavaScript对象迭代产生一组对象

obj1 = { 
    name: 'rich', 
    email: '[email protected]', 
    date: { 
     greg : { 
      name: 'greg', 
      id: 1234} 
     } 
} 

我怎样才能通过这个数组对象(被称为usersArray)的迭代,并与包含用户的名称为每个对象添加到对象(被称为usersArrayObj)的另一个数组(如富)和其他(如格雷格的名字) 使我最终的结果会是什么样子的下面:

obj1 = { 
    name: 'rich', 
    pairName: 'greg', 
} 

我曾尝试使用hasOwnProperty等等,但他们行为有点古怪.. 。

+0

'obj1'看起来并不像一个正确的对象字面 – RomanPerekhrest

+0

@NinaScholz: _“**其中一个对象**如下所示:”_ – Cerbrus

+0

是关键“11-28-2016”动态? –

回答

-1

对于这种情况什么你可以使用的是JS功能Object.keys()

obj2= { 
    name:obj1.name, 
    pairName: Object.keys(obj1.date)[0] 
} 
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);

+0

欢呼声,这行是干什么的:'pairName:Object.keys(item。日期)[0]'我得到一个错误说:不能将undefined或null转换为对象。 –

+0

为什么我只能做obj1.date.pairName?它不喜欢这样,我得到一个错误,说'不能读取未定义的属性'pairName'即使日期显然存在? –

+0

@蠕虫:关于_“未定义或为空”_:你在'myArray'中输入了什么数据?您设置问题的方式,我的答案应该是正确的。 – Cerbrus

0

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

+0

你可以显示这个数组内的另一个对象吗? –

+0

@Theworm当然,我更新了我的回答 – Weedoze

+0

欢呼声。我接受之前的最后一件事是什么,这行是干什么的:'“pairName”:Object.keys(user.date)[0]'? –

-1
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"}]" 
+0

什么是downvote? –

0

该解决方案使用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);

+0

如何更改代码以符合我的新代码? –

+0

它已更新为您的新代码。你还没有删除'greg:'。 –

+0

那么现在呢? –