为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript:仅列出具有相同父值的值一次

JavaScript:仅列出具有相同父值的值一次

翻过高山走不出你 2021-12-02 16:51:01
所以直奔主题。我有一个问题,我从 api 获取数据作为对象数组。每个对象包括一个城市和一个区。城市和地区是包含名称和 ID 的对象  city: Object    id: 3    name: "Rathbury"  district: Object    id: 39    name: "Bosnia and Herzegovina District"更新: 输入[  {    "title": "Kris Lodge",    "location_text": "5739 Jakob Prairie Suite 451\nWest Leraview, MI 35816",    "latitude": "",    "longitude": "",    "phone_numbers": [      "01648997890",      "01038129111"    ],    "emails": [      "christy.spinka@example.com",      "yboyle@example.org"    ],    "city": {      "id": 9,      "name": "Bernhardburgh"    },    "district": {      "id": 13,      "name": "Hong Kong Neighbourhood"    }  },  {    "title": "Tanner Circles",    "location_text": "4513 Patrick Junctions\nNorth Priceport, CT 05572-1565",    "latitude": "",    "longitude": "",    "phone_numbers": [      "01894655129",      "01768939354",      "01054035727",      "01120801876"    ],    "emails": [      "francisca56@example.org",      "lloyd.hilpert@example.com",      "aaliyah.rau@example.net"    ],    "city": {      "id": 3,      "name": "Rathbury"    },    "district": {      "id": 11,      "name": "Vanuatu Neighbourhood"    }  },  {    "title": "Walsh Harbors",    "location_text": "5300 McGlynn Flat\nGustaveville, PA 08941-6431",    "latitude": "",    "longitude": "",    "phone_numbers": [      "01330125574"    ],    "emails": [      "qgreenholt@example.org",      "isawayn@example.net",      "jtillman@example.com"    ],    "city": {      "id": 15,      "name": "Wintheiserfort"    },    "district": {      "id": 34,      "name": "Armenia Neighbourhood"    }  },  {    "title": "Botsford Villages",    "location_text": "461 Zemlak Hollow Suite 549\nLangworthberg, NE 40867-0943",    "latitude": "",    "longitude": "",    "phone_numbers": [      "01955713451",      "01819751112",      "01366897031"    ],一个城市可以出现两次,但一个地区不能出现。如何只列出城市内的地区一次?这是显示更多详细信息的图像。我怎样才能得到展示Mali Area和Bosnia and Herzegovina District下Amparoville一次?
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

根据您希望收藏的外观,我认为此解决方案适合您。


var data = [{

    city: {

      id: 3,

      name: "Amaporville"

    },

    district: {

      id: 39,

      name: "Bosnia and Herzegovina District"

    }

  },

  {

    city: {

      id: 3,

      name: "Rathbury"

    },

    district: {

      id: 38,

      name: "Montenegro Heights"

    },


  },

  {

    city: {

      id: 3,

      name: "Amaporville"

    },

    district: {

      id: 40,

      name: "Mali Area"

    }

  }

]



function transformArr(orig) {

  var newArr = [],

    cities = {},

    i, cur;

  for (i = 0; i < orig.length; i++) {

    cur = orig[i];

    if (!cities[cur.city.name]) {

      var obj = {}

      obj['city'] = cur.city

      cities[cur.city.name] = {

        districts: []

      };

      obj['districts'] = cities[cur.city.name].districts

      newArr.push(obj);

    }

    cities[cur.city.name].districts.push(cur.district);

  }

  return newArr;

}


console.log(transformArr(data))


本质上,您使用哈希图并向其中添加城市。城市名称指向一系列地区。城市对象的目的是确定您的集合是否已经包含该城市的名称。如果是这样,将当前地区添加到该项目地区。


当您组织散列映射时,您还向其添加city键obj并为其分配当前对象的城市对象的值。然后你对地区做同样的事情。最后,属于一个城市的所有地区都会出现在该城市下方,而不是之前出现两次(或者该城市在原始收藏中出现过多少次)。


查看完整回答
反对 回复 2021-12-02
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号