2017-07-26 51 views
-1

的javaScript ES6 .map()返回預期包括位置 & 城市基於哪個activeMember: truememberDetail的javaScript ES6地圖()返回某些對象只

const data = [ 
 
    { 
 
    id: 131131, 
 
    title: "Completed members", 
 
    memberDetail: { 
 
     "0": { 
 
     activeMember: false, 
 
     memberDetails: { 
 
      location: "Mumbai", 
 
      Country: "India" 
 
     } 
 
     }, 
 
     "1": { 
 
     activeMember: true, 
 
     memberDetails: { 
 
      location: "London", 
 
      Country: "England" 
 
     } 
 
     }, 
 
     "2": { 
 
     activeMember: false, 
 
     memberDetails: { 
 
      location: "Colombo", 
 
      Country: "Sri Lanka" 
 
     } 
 
     } 
 
    } 
 
    }, 
 
    { 
 
    id: 130500, 
 
    title: "Acting members", 
 
    memberDetail: { 
 
     "0": { 
 
     activeMember: false, 
 
     memberDetails: { 
 
      location: "Paris", 
 
      Country: "France" 
 
     } 
 
     }, 
 
     "1": { 
 
     activeMember: false, 
 
     memberDetails: { 
 
      location: "Katmandu", 
 
      Country: "Nepal" 
 
     } 
 
     }, 
 
     "2": { 
 
     activeMember: true, 
 
     memberDetails: { 
 
      location: "Dublin", 
 
      Country: "Ireland" 
 
     } 
 
     } 
 
    } 
 
    }, 
 
    { 
 
    id: 131096, 
 
    title: "Pending members", 
 
    memberDetail: { 
 
     "0": { 
 
     activeMember: true, 
 
     memberDetails: { 
 
      location: "Perth", 
 
      Country: "Australia" 
 
     } 
 
     }, 
 
     "1": { 
 
     activeMember: false, 
 
     memberDetails: { 
 
      location: "Berlin", 
 
      Country: "Germany" 
 
     } 
 
     } 
 
    } 
 
    } 
 
]; 
 

 
const resultValue = data.map(detail => { 
 
    var obj = { 
 
    "id": detail.id, 
 
    "title": detail.title, 
 
    }; 
 
    return obj 
 
}); 
 

 
console.log(resultValue);

**期待結果** enter image description here

+0

你是問如何通過的鍵然後遍歷一個東西?如果您只希望返回符合條件的東西,請使用Object.keys()' –

回答

0

這將是過濾

[1,2,3].filter(x => (x === 1)) 
+0

過濾器代替map。檢查這個參考。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter – Kosch

2
data.map(detail => { 
    var members = Object.values(detail.memberDetail); 
    var activeMember = members.find(member => member.activeMember) || {}; 
    var memberData = activeMember.memberDetails || {}; 
    return { 
    "id": detail.id, 
    "title": detail.title, 
    "location": memberData.location, 
    "Country": memberData.Country 
    }; 
}) 

應該這樣做。

如果沒有活動成員locationCountry返回undefined。如果你希望他們返回在這種情況下一個空字符串,只需編寫

... 
"location": memberData.location || "", 
"Country": memberData.Country || "" 
... 

如果有多個活躍的成員,則會選取一個具有最低ID。

0

您可以使用ES6 destructuring syntax和內置插件一樣Object.assignObject.valuesArray#find以聲明方式轉換數據,像這樣:

const data = [{id:131131,title:"Completed members",memberDetail:{"0":{activeMember:false,memberDetails:{location:"Mumbai",Country:"India"}},"1":{activeMember:true,memberDetails:{location:"London",Country:"England"}},"2":{activeMember:false,memberDetails:{location:"Colombo",Country:"Sri Lanka"}}}},{id:130500,title:"Acting members",memberDetail:{"0":{activeMember:false,memberDetails:{location:"Paris",Country:"France"}},"1":{activeMember:false,memberDetails:{location:"Katmandu",Country:"Nepal"}},"2":{activeMember:true,memberDetails:{location:"Dublin",Country:"Ireland"}}}},{id:131096,title:"Pending members",memberDetail:{"0":{activeMember:true,memberDetails:{location:"Perth",Country:"Australia"}},"1":{activeMember:false,memberDetails:{location:"Berlin",Country:"Germany"}}}}] 
 

 

 
const result = data.map(
 
    ({ id, title, memberDetail }) => Object.assign({ id, title }, Object(
 
    Object.values(memberDetail).find(m => m.activeMember) 
 
).memberDetails) 
 
) 
 

 
console.log(result)
.as-console-wrapper { min-height: 100% }