不幸的是,我的Web服务响应返回了一个像这样的字符串:

{"valueStr":"Single"|"valueId":"2019"}
{"valueStr":"Married"|"valueId":"2019"}
{"valueStr":"Divorced"|"valueId":"2020"}
{"valueStr":"Widowed"|"valueId":"2020"}


我需要过滤掉那些带有valueId的对象。例如,所有2019年或所有2020年。

响应不是JSON,所以我无法解析它,并且未正确定界。所以我坚持尝试像这样简单的事情:

function parseItemByYear(item){
    // replace all | with ,
    var modifiedObj = item.replace(/\|/g, ',');

    // split into array
    var newArr = modifiedObj.split('}');

    // remove all
    var newestArr = newArr.map(function(item){item.replace(/^\{/g,'')});

    // JSON.parse the object
    // var lovObj = JSON.parse(modifiedFilingStatusObj);

    // capture the current tax year
    // replace , with |
    // rebuild the object
    // return the filtered object
    return newestArr;
}


但是我在尝试设置newestArr的地方失败了。我的RegEx错误。我的方法太复杂了吗?有没有我看不到的更简单方法?感谢您的提示。

最佳答案

我认为这很简单,并且可以解决问题。



// Assuming it's single or multiline string
let response = `{"valueStr":"Single"|"valueId":"2019"}
{"valueStr":"Married"|"valueId":"2019"}
{"valueStr":"Divorced"|"valueId":"2020"}
{"valueStr":"Widowed"|"valueId":"2020"}`;

function parseItemByYear(response) {
  // Replace '|' with ','
  response = response.replace(/\|/g, ',');

  // Replace '}{' with any whitespace in between to '},{'
  response = response.replace(/}\s?{/g, '},{');

  // Make it an array
  let arr = JSON.parse(`[${response}]`);

  // Return an array of valueId attribute of all array elements
  return arr.map(item => item.valueId);
}


console.log(parseItemByYear(response));

关于javascript - 如何过滤代表对象的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58771719/

10-16 00:12