js函数之二级地址数组过滤

290 阅读1分钟

使用场景:地址的数据,省市区三级或则省市两级的地址,过滤部分地区

代码:

// 初始地址数据
const addressData = [
  {
    "provinceId": "200",
    "provinceName": "广东",
    "citys": [
      {
        "cityId": "757",
        "cityName": "佛山"
      }, {
        "cityId": "200",
        "cityName": "广州"
      }, {
        "cityId": "755",
        "cityName": "深圳"
      }
    ]
  },
  {
    "provinceId": "371",
    "provinceName": "河南",
    "citys": [
      {
        "cityId": "376",
        "cityName": "信阳"
      }, {
        "cityId": "371",
        "cityName": "郑州"
      }]
  },
];

// 过滤数组
const arrFilter = [
  {
    'provinceId': 200,//广东
    'citys': [200, 755],//广州-深圳
  },
  {
    'provinceId': 371,//河南
    'citys': [371],//郑州
  }
]

// 过滤函数
function addressFilter() {
  var data = addressData;
  var arr = arrFilter;

  for (let i1 = 0; i1 < data.length; i1++) {
    for (let j1 = 0; j1 < arr.length; j1++) {
      if (data[i1].provinceId == arr[j1].provinceId) {
        console.log("省级匹配:" + data[i1].provinceName);

        var datab = data[i1].citys
        for (let i2 = 0; i2 < datab.length; i2++) {
          var arrb = arr[j1].citys
          for (let j2 = 0; j2 < arrb.length; j2++) {
            if (datab[i2].cityId == arrb[j2]) {
              console.log(datab[i2].cityName);
              datab.splice(i2, 1);
              data[i1].citys = datab;
            }
          }
        }

      }
    }
  }

  console.log("data:", data)
  return data;

}

// 执行函数
addressFilter();

控制台打印如下

后续

  1. 其实,过滤的数组arrFilter和初始的数组addressData,格式完全一致最好,datab[i2].cityId == arrb[j2]这里的判断就可以改为一致的了,这里仅仅作为示例,不再修改了。
  2. 如果过滤整个省份,需要定义一种格式,通过修改过滤函数实现。