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日
  • 展开全部

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料