对象搜索键值并删除其中的第一个和最后一个字符



我有一个看起来像这样的对象:

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,它将使用trycatch
  • 然后使用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"]

相关内容

最新更新