2016-11-28 129 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

那麼現在呢? –