亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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": [      "[email protected]",      "[email protected]"    ],    "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": [      "[email protected]",      "[email protected]",      "[email protected]"    ],    "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": [      "[email protected]",      "[email protected]",      "[email protected]"    ],    "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 關注
  • 175 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號