不幸的是,我的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/