Computer >> Máy Tính >  >> Lập trình >> Javascript

Lập trình động:trả về tất cả dữ liệu phù hợp trong JavaScript

Giả sử chúng ta có một đối tượng JSON có thông tin về vị trí của một số thành phố của một số quốc gia như thế này -

const countryInfo = {
   country: [{
      name: "Bangladesh",
      province: [{
         name:"Dhaka",
         city: [{
            name:"Tangail",
            lat: '11'
         }, {
            name:"Jamalpur",
            lat: '12'
         }]
      }, {
         name: "Khulna",
         city: [{
            name:"Jossore",
            lat: '22'
         }, {
            name:"Tangail",
            lat: '23'
         }]
      }, {
         name: "Rajshahi",
         city: [{
            name:"Pabna",
            lat: '33'
         }, {
            name:"Rangpur",
            lat: '33'
         }]
      }]
   },{
      name: "India",
      province: [{
         name:"West Bengal",
         city: [{
            name:"Calcutta",
            lat: '111'
         }, {
            name:"Tangail",
            lat: '112'
         }]
      }, {
         name: "Uttar Pradesh",
         city: [{
            name:"Agra",
            lat: '122'
         }, {
            name:"Tajmahal",
            lat: '123'
         }]
      }, {
         name: "Rajasthan",
         city: [{
            name:"Kanpur",
            lat: '131'
         }, {
            name:"Jaypur",
            lat: '132'
         }]
      }]
   }]
};

Chúng tôi được yêu cầu viết một hàm JavaScript có một đối tượng như vậy và một chuỗi tìm kiếm.

Sau đó, chúng tôi sẽ tìm kiếm tất cả các tên thành phố phù hợp với chuỗi tìm kiếm và trả về một mảng tất cả các đối tượng thành phố phù hợp với truy vấn.

Ví dụ

Mã cho điều này sẽ là -

const countryInfo = {
   country: [{
      name: "Bangladesh",
      province: [{
         name:"Dhaka",
         city: [{
            name:"Tangail",
            lat: '11'
         }, {
            name:"Jamalpur",
            lat: '12'
         }]
      }, {
         name: "Khulna",
         city: [{
            name:"Jossore",
            lat: '22'
         }, {
            name:"Tangail",
            lat: '23'
         }]
      }, {
         name: "Rajshahi",
         city: [{
            name:"Pabna",
            lat: '33'
         }, {
            name:"Rangpur",
            lat: '33'
         }]
      }]
   },{
      name: "India",
      province: [{
         name:"West Bengal",
         city: [{
            name:"Calcutta",
            lat: '111'
         }, {
            name:"Tangail",
            lat: '112'
         }]
      }, {
         name: "Uttar Pradesh",
         city: [{
            name:"Agra",
            lat: '122'
         }, {
            name:"Tajmahal",
            lat: '123'
         }]
      }, {
         name: "Rajasthan",
         city: [{
            name:"Kanpur",
            lat: '131'
         }, {
            name:"Jaypur",
            lat: '132'
         }]
      }]
   }]
};
const searchForCity = (obj, query) => {
   const cities = obj.country.reduce((acc, val) => {
      val.province.forEach(el => {
         el.city.forEach(elm => {
            acc.push(elm);
         });
      });
      return acc;
   },[]);
   const res = cities.filter(el => {
      return el.name === query;
   });
   return res;
};
console.log(searchForCity(countryInfo, 'Tangail'));

Đầu ra

Đầu ra trong bảng điều khiển -

[
   { name: 'Tangail', lat: '11' },
   { name: 'Tangail', lat: '23' },
   { name: 'Tangail', lat: '112' }
]