You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现addressInfo JSON对象动态更新的方案需求

JavaScript 动态更新 addressInfo 对象的三种场景解决方案

现有初始的 addressInfo JSON 对象如下,需要针对三种不同场景实现动态更新:

{
  "addressInfo": {}
}

场景说明

场景1:存在 cityInfo 对象时转成 filters 数组

当 addressInfo 中存在 cityInfo 对象时,移除该属性,将原 cityInfo 和新城市对象一起存入新创建的 filters 数组。

  • 原结构:
{
  "addressInfo": {
    "cityInfo": {
      "cityName": "Chicago",
      "cityZip": "60007"
    }
  }
}
  • 更新后结构:
{
  "addressInfo": {
    "filters": [
      {
        "cityName": "Chicago",
        "cityZip": "60007"
      },
      {
        "cityName": "New York",
        "cityZip": "10001"
      }
    ]
  }
}

场景2:无 cityInfo 对象时直接添加

当 addressInfo 中不存在 cityInfo 对象时,直接添加新的 cityInfo 对象。

  • 原结构:
{
  "addressInfo": {}
}
  • 更新后结构:
{
  "addressInfo": {
    "cityInfo": {
      "cityName": "Chicago",
      "cityZip": "60007"
    }
  }
}

场景3:已有 filters 数组时追加新对象

当 addressInfo 中已经存在 filters 数组(多城市信息已转为数组形式)时,将新城市对象追加到数组中。

  • 原结构:
{
  "addressInfo": {
    "filters": [
      {
        "cityName": "Chicago",
        "cityZip": "60007"
      },
      {
        "cityName": "New York",
        "cityZip": "10001"
      }
    ]
  }
}
  • 更新后结构:
{
  "addressInfo": {
    "filters": [
      {
        "cityName": "Chicago",
        "cityZip": "60007"
      },
      {
        "cityName": "New York",
        "cityZip": "10001"
      },
      {
        "cityName": "San Francisco",
        "cityZip": "94016"
      }
    ]
  }
}

实现代码

下面是一个通用函数,可处理上述三种场景,同时通过深拷贝避免修改原始数据:

function updateAddressInfo(originalData, newCity) {
  // 深拷贝原数据,防止修改原始对象
  const data = JSON.parse(JSON.stringify(originalData));
  const addressInfo = data.addressInfo;

  if (addressInfo.filters) {
    // 场景3:已有filters数组,直接追加新城市
    addressInfo.filters.push(newCity);
  } else if (addressInfo.cityInfo) {
    // 场景1:存在cityInfo,转为filters数组
    const oldCity = addressInfo.cityInfo;
    delete addressInfo.cityInfo;
    addressInfo.filters = [oldCity, newCity];
  } else {
    // 场景2:无cityInfo,直接添加新的cityInfo对象
    addressInfo.cityInfo = newCity;
  }

  return data;
}

测试示例

// 测试场景1
const scenario1Data = {
  "addressInfo": {
    "cityInfo": {
      "cityName": "Chicago",
      "cityZip": "60007"
    }
  }
};
const newYork = { "cityName": "New York", "cityZip": "10001" };
console.log(updateAddressInfo(scenario1Data, newYork));

// 测试场景2
const scenario2Data = { "addressInfo": {} };
const chicago = { "cityName": "Chicago", "cityZip": "60007" };
console.log(updateAddressInfo(scenario2Data, chicago));

// 测试场景3
const scenario3Data = {
  "addressInfo": {
    "filters": [
      { "cityName": "Chicago", "cityZip": "60007" },
      { "cityName": "New York", "cityZip": "10001" }
    ]
  }
};
const sanFrancisco = { "cityName": "San Francisco", "cityZip": "94016" };
console.log(updateAddressInfo(scenario3Data, sanFrancisco));

内容的提问来源于stack exchange,提问作者user1015388

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 03:53:16