【问题标题】:Javascript update Object attribute valueJavascript 更新对象属性值
【发布时间】:2019-05-02 22:23:35
【问题描述】:

我正在尝试更新对象属性:

   data : [
     {"id":1,"rp":"2426","cr":"11-11"},
     {"id":1,"rp":"1119","cr":"19-21"},
     {"id":1,"rp":"3453","cr":"23-81"}
    ]

新对象将如下更新。

NewData: [
 {"id":1,"rp":"2426","cr":"11/11"},
 {"id":1,"rp":"1119","cr":"19/21"},
 {"id":1,"rp":"3453","cr":"23/81"}
]

我希望更新所有值的对象 cr 属性,例如使用 javascript.replace() 方法,我会做 replace("-","/")。

【问题讨论】:

    标签: javascript object ecmascript-6 ecmascript-5


    【解决方案1】:

    const data = [{"id":1,"rp":"2426","cr":"11-11"},{"id":1,"rp":"1119","cr":"19-21"},{"id":1,"rp":"3453","cr":"23-81"}]
    
    const r = JSON.parse(JSON.stringify(data).replace(/-/g,'/'))
    console.log(r);

    【讨论】:

      【解决方案2】:

      这只是Array#mapString#replace的简单用法:

      ES2018

      const data = [{"id":1,"rp":"2426","cr":"11-11"},{"id":1,"rp":"1119","cr":"19-21"},{"id":1,"rp":"3453","cr":"23-81"}]
      
      const r = data.map(({ cr, ...rest }) => ({ cr: cr.replace('-', '/'), ...rest }));
      
      console.log(r);

      【讨论】:

      • 也许值得注意的是,rest/spread 属性是 ES2018 的一部分,而不是 ES2015。
      • 现在看起来您声称您的解决方案可以与 ES2015 和 ES2016 一起使用。但正如我所说,对象休息/传播是 ES2018。
      • @FelixKling 如你所愿
      【解决方案3】:

      试试这个:

      const data = [
        {"id":1,"rp":"2426","cr":"11-11"},
        {"id":1,"rp":"1119","cr":"19-21"},
        {"id":1,"rp":"3453","cr":"23-81"}
      ];
      
      const newData = data.map(item => ({...item, cr: item.cr.replace(/-/g, '/')}));
      
      console.log(newData);

      如果您需要它在 IE11 中工作:

      const data = [
        {"id":1,"rp":"2426","cr":"11-11"},
        {"id":1,"rp":"1119","cr":"19-21"},
        {"id":1,"rp":"3453","cr":"23-81"}
      ];
      
      const newData = data.map(
        function(item) {
          return {
            id: item.id,
            rp: item.rp,
            cr: item.cr.replace(/-/g, '/')
          }
        }
      );
      
      console.log(newData);

      【讨论】:

      • 这看起来像是纯粹的,但实际上并非如此。
      • 更新到不影响原始obj
      【解决方案4】:

      下面试试

      data.forEach(function(object){
          object["cr"] = object["cr"].replace("-","/");
      });
      

      【讨论】:

        【解决方案5】:

        你可以试试这个

        let data = [
             {"id":1,"rp":"2426","cr":"11-11"},
             {"id":1,"rp":"1119","cr":"19-21"},
             {"id":1,"rp":"3453","cr":"23-81"}
            ];
            
            
        let newData = data.map(e=>{
          e.cr = e.cr.replace(/-/, '/')
          return e
        })
        
        console.log(newData)

        【讨论】:

          【解决方案6】:

          您可以使用map 方法创建新数组并使用replace 更新cr 属性。

          var data = [{"id":1,"rp":"2426","cr":"11-11"},{"id":1,"rp":"1119","cr":"19-21"},{"id":1,"rp":"3453","cr":"23-81"}]
          var update = data.map(({cr, ...rest}) => ({...rest, cr: cr.replace("-","/")}))
          console.log(update)

          【讨论】:

            【解决方案7】:

            您可以迭代和映射数组。

            var data = [{ id: 1, rp: "2426", cr: "11-11" }, { id: 1, rp: "1119", cr: "19-21" }, { id: 1, rp: "3453", cr: "23-81" }],
                newArray = data.map(o => Object.assign({}, o, { cr: o.cr.replace("-","/") }));
            
            console.log(newArray);
            .as-console-wrapper { max-height: 100% !important; top: 0; }

            【讨论】:

              猜你喜欢
              • 2012-03-16
              • 2016-07-13
              • 2021-08-12
              • 2016-12-19
              • 1970-01-01
              • 2013-01-18
              • 2012-09-14
              • 1970-01-01
              • 2020-07-16
              相关资源
              最近更新 更多