【问题标题】:remove quotes around all "true" and "false" found in object删除对象中所有“真”和“假”的引号
【发布时间】:2020-06-21 20:50:59
【问题描述】:
  fetch("./files.json")
        .then(response => response.json())
        .then((users) => {
            var files = users.find(x => typeof x[username] !== "undefined");
            console.log(JSON.stringify(files);
            files = files.replace(/:[ ]*"false"/,':false' ).replace( /'/g,'"');

        })

上面我只是想将我所有的"true""false" 替换为没有引号 true false

上面的错误replace is not a function,我也试过map,在undefined error上设置不了。在这些尝试之前,usersfiles 控制台很好。有没有能力在这里做到这一点?

回复数据为JSON.stringify后如下所示:

userMoves: [{id: "slz1", checked: "false"}, {id: "slz2", checked: "false"}, {id: "slz3", checked: "false"},…]

更新:首先将files 转换为字符串会更新第一个找到的false,但不是全部。

files = JSON.stringify( files ).replace(/:[ ]*"false"/,':false' ).replace( /'/g,'"');

【问题讨论】:

  • 你能提供响应的例子吗?
  • 我猜文件不是字符串,试试files = JSON.stringify( files ).replace(/:[ ]*"false"/,':false' ).replace( /'/g,'"');
  • @admcfajn 嘿,所以我刚刚尝试了这个,它只是更新了第一个找到的 false 实例——但确实运行了;但是它并没有取代所有这些
  • 如前所述,files 不是字符串,它是一个普通的 JS 数据结构。甚至不用正则表达式,只需进行正常迭代并直接设置您需要设置为特定内容的属性。
  • @AlexOwl 是的,我有

标签: javascript json regex loops


【解决方案1】:

不需要正则表达式或字符串化。

首先,我们将遍历数组 userMoves 中的对象数组,然后我们使用严格检查来检查 1.) 值是 true 2 值是字符串,然后我们分别分配 true 和 false

fetch("./files.json")
.then(response => response.json())
.then((users) => {
    let files = users.find(x => typeof x[username] !== "undefined");
    for ( let file in files.userMoves ){
        if ( files[ file ].checked === "true" ) { 
            files[ file ][ 'checked' ] = true;
        }else if ( files[ file ].checked === "false" ){
            files[ file ][ 'checked' ] = false;
        }
    }
})

【讨论】:

  • 谢谢看起来很棒,但遗憾的是对我不起作用,现在我只是在此之后安慰对象对象
  • 什么是[文件]引用?我认为一个更通用的可以工作,因为我需要所有“真”和“假”被发现只是真假
  • in for ( let file in files ){, file 引用当前索引。你可能想要for ( let file in files.userMoves ){
【解决方案2】:

如果您将g-flag 添加到您的第一个正则表达式,您的原始方法应该有效。第二个replace() 是多余的。我修改了第一个正则表达式,也允许处理 "true" 值:

var files=[{id: "slz1", checked: "false"},
       {id: "slz2", checked: "false"}, 
       {id: "slz3", checked: "false"},
       {id: "slz4", checked: "true"}];
var filesJSON=
  JSON.stringify(files).replace(/:[ ]*"(true|false)"/g,':$1' );
  
console.log(JSON.parse(filesJSON));

【讨论】:

    【解决方案3】:

    使用Array.map 将每个对象更改为其布尔值。

    const data = {
      userMoves: [{
        id: "slz1",
        checked: "false"
      }, {
        id: "slz2",
        checked: "true"
      }, {
        id: "slz3",
        checked: "false"
      }]
    };
    
    function convertToBoolean(input) {
      return {
        userMoves: input.userMoves.map(item => ({ ...item,
          checked: item.checked === 'true'
        }))
      };
    }
    
    console.log(convertToBoolean(data));

    【讨论】:

      猜你喜欢
      • 2016-10-28
      • 2011-03-12
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 2023-02-01
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多