qq_42479480 2021-11-02 15:58 采纳率: 66.7%
浏览 80
已结题

如何把数组遍历到的内容按条件添加进对象?

更改输入框内容点击确定后把输入框里面的值还原成一个数组包裹的对象

这是输入框的值这个值是一串字符串
AND PT:(2,3) AND APD:(2021-11-01TO2021-11-23) AND TTL:(1123)

这个字符串我处理之后拿到了这些需要的关键字

img

其中AND和OR是关系他们对应的是对象里面的“ checkedRelationShipVal:”“
APD、TTL和PT是选中的关键词,他们对应的是 “checkedKeyWord:”“
日期较远的日期对应的是stateSearchDate:”“较近的日期是endSearchDate:”“
单个数字是类型对应对象里的数组patentType:[]
1123一个字符串对应的是advancedSearchVal:”“
这个是我用来判断对比选中关键词的一个数组

img

这是我想还原成的格式

[
  {
    "checkedRelationShipVal": "AND",
    "advancedSearchVal": "",
    "checkedKeyWord": "PT",
    "stateSearchDate": "",
    "endSearchDate": "",
    "patentType": [
      "1",
      "2"
    ],
  },
  {
    "checkedRelationShipVal": "AND",
    "advancedSearchVal": "",
    "checkedKeyWord": "APD",
    "stateSearchDate": "2017-11-01",
    "endSearchDate": "2021-11-03",
    "patentType": [],
  },
  {
    "checkedRelationShipVal": "AND",
    "advancedSearchVal": "一种",
    "checkedKeyWord": "TTL",
    "stateSearchDate": "",
    "endSearchDate": "",
    "patentType": [],
  }
]

  • 写回答

3条回答 默认 最新

  • tonyzhangcn 2021-11-02 17:44
    关注
    1. 首先你拿到的这个应该是个数组,把他拼一下得到一个长的字符串,用于断句。
    let result = [];//这是最终结果的存放数组
    let arr = ['AND', 'PT',2,3, 'AND', 'APD','2021-11-01','2021-11-23', 'AND', 'TTL','1123'];
    let search_str = arr.join(",");
    

    2.断句,根据AND,注意断句完后生成的数组从第二个开始就是我们要的内容。

    let arr1 = search_str.split('AND');
    for(let i=1;i<arr1.length;i++){
    let obj = {checkedRelationShipVal:'AND'};
    let temp = arr1[i].split(",");
    obj.advancedSearchVal = "";
    obj.checkedKeyWord = temp[1];
    obj.stateSearchDate = "";
    obj.endSearchDate = "";
    obj.patentType = [];
    
    //这里根据不同的类型填写不同的值
    if(temp[1]==="PT"){
      obj.patentType=[temp[2],temp[3]];
    }
    
    if(temp[1]==="APD"){
     obj.stateSearchDate = temp[2];
    obj.endSearchDate = temp[3];
    }
    if(temp[1]==="TTL"){
     obj.advancedSearchVal = temp[2];
    }
    result.push(obj);
    }
    

    这样就可以得到需要的结果result了。
    这里提取数据使用的是if 判定。其实如果要做灵活一点的话,需要定义一个字典对象以便扩展,例如:

    let dict = {DT:[{key:'patentType',indexs:[2,3]/这里是index,不是具体的数值/}],TTL:[{key:'advancedSearchVal',indexes:[1]}],ADP:[{key:'stateSearchDate',indexes:[2]},{key:'endSearchDate',indexes:[3]}]}
    

    使用这个dict可以进行更灵活和方便扩展的生成想要的数据了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月10日
  • 已采纳回答 11月2日
  • 修改了问题 11月2日
  • 修改了问题 11月2日
  • 展开全部

悬赏问题

  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?