-1

javaScript ES6 .map() return expecting including location & city based on which activeMember: true in memberDetail

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);

**Expecting result ** enter image description here

Mo.
  • 26,306
  • 36
  • 159
  • 225
  • Are you asking how to iterate over the keys of an Object? Use `Object.keys()` –  Jul 26 '17 at 22:41

2 Answers2

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
  };
})

should do it.

If there is no active member location and Country return undefined. If you want them to return an empty string in that case, simply write

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

If there are multiple active members, it picks the one with the lowest id.

Stephan
  • 2,028
  • 16
  • 19
0

You can use ES6 destructuring syntax and built-ins like Object.assign, Object.values, and Array#find to transform your data declaratively like so:

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% }
gyre
  • 16,369
  • 3
  • 37
  • 47