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
相关产品推荐
相关产品推荐

