【问题标题】:javaScript ES6 map() return certain object onlyjavaScript ES6 map() 仅返回特定对象
【发布时间】:2018-01-02 11:02:06
【问题描述】:

javaScript ES6 .map() 返回期望包括 location 和 city 基于 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);

**期待结果**

【问题讨论】:

  • 您是在问如何迭代对象的键吗?使用Object.keys()

标签: javascript json loops ecmascript-6 es6-map


【解决方案1】:

您可以使用 ES6 destructuring syntax 和 Object.assign、Object.values 和 Array#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% }

【讨论】:

    【解决方案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
      };
    })
    

    应该这样做。

    如果没有活动成员location 和Country,则返回undefined。如果您希望它们在这种情况下返回一个空字符串,只需编写

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

    如果有多个活跃成员,它会选择具有最低 id 的成员。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-28
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 2013-11-28
      • 1970-01-01
      相关资源
      最近更新 更多