我有一个看起来像这样的对象:
obj = {file: "file.doc", myData: "['dat1','dat2']"}
我需要做的是要有一些代码,这些代码将在对象内搜索mydata并替换[]。
之间的周围引号例如:
搜索:myData: "['dat1','dat2']"}
中的"['dat1','dat2']"
并删除引号,因此最终结果看起来像这样:
{file: "file.doc", myData: ['dat1','dat2']}
我该怎么做?
您拿起字符串,卸下括号,使用正则替换所有单声价,然后根据所有项目之间留下的逗号进行拆分。
obj = {file: "file.doc", myData: "['dat1','dat2']"}
var str = obj.myData.replace(/'/g,"").replace("[","").replace("]","");
obj.myData = str.split(",");
console.log(obj);
首先,您可以用双引号替换单个引号'
,然后使用JSON.parse
let obj = {
file: "file.doc",
myData: "['dat1','dat2']"
}
let k = obj.myData.replace(/'/g, '"');
let output = JSON.parse(k);
obj.myData = output;
console.log(obj)
您需要按照以下步骤操作:
- 您需要将
myData
内的''
更改为""
- 您需要创建一个
function
,它将使用try
和catch
。 - 然后使用
reduce()
并检查当前值是否有效数组,因此使用JSON.parse()
将其转换为数组,并将其添加为ac
- 如果其无效数组,则将值设置为上一个
let obj = {file: "file.doc", myData: '["dat1","dat2"]'}
function IsJsonString(str) {
try {
var json = JSON.parse(str);
return (Array.isArray(json));
} catch (e) {
return false;
}
}
let res = Object.keys(obj).reduce((ac,key) => {
if(IsJsonString(obj[key])){
ac[key] = JSON.parse(obj[key])
}
else ac[key] = obj[key]
return ac;
},{})
console.log(res);
这是一个解决方案:
var obj = {file: "file.doc", myData: "['dat1','dat2']"}
//turn myData into an array.
var arr = obj.myData.split("["); // ["", "'dat1','dat2']"]
//remove the first (empty string) element.
arr.splice(0, 1); // ["'dat1','dat2']"]
//convert the other element (string) into an array of 2
elements.
var newArr = arr[0].split(","); //["'dat1'", "'dat2']"]
//declare an empty array
var finalArr = [];
//loop over newArr array, and push the result of cutting the
string from index 1 to 4
for (const element of newArr ) {
finalArr.push(element.substring(1, 4));
}
//reassign the value of myData property of obj object.
obj.myData = finalArr;
console.log(obj.myData); //["dat1", "dat2"]