【问题标题】:Get highest number in a string that's inside an object获取对象内部字符串中的最大数字
【发布时间】:2017-10-03 15:39:07
【问题描述】:

我想克隆一个对象,但是我需要为该对象分配一个新的 ID。

问题是对象已将 ID 命名为字符串。而且我需要增加每个克隆的数量,以避免冲突。

Obj = [
    {_name:"Jane", _id:"_per1"},
    {_name:"Jonas", _id:"_per2"},
    {_name:"Joakim", _id:"_per3"},
    {_name:"Johanna", _id:"_per4"}
    ]

当我克隆其中一个时。我想更改克隆上的“_id”,使其高于本例中的“_per4”。

因此,我希望能够从 'Obj' 中的 '_id' 中提取最大的数字。

我一直用这个从“_id”中提取数字。

var maxID = Obj._id.replace() /^\D+/g, '');

我也试过了

Math.max.apply(Math,Obj.map(function(o){return o._id;}))

但这不起作用。认为这是因为 '_id' 是字符串而不是 int。

帮助表示赞赏!

【问题讨论】:

  • 将它们按顺序存储在数组中会更有意义——也更容易——然后使用项目的索引将任何数值添加到id。破解字符串以使其部分价值增加总是一种痛苦,会导致更多的工作却很少/没有好处
  • 你能提供你的输出吗

标签: javascript jquery string object


【解决方案1】:

// If you have 
var Obj = {
_per1:"Jane",
_per2:"Jonas",
_per3:"Joakim",
_per4:"Johanna"
} 

//then you can do 

console.log(Object.keys(Obj).sort().pop())

如果超过 9 个,则需要在排序中添加一个函数,以便在排序时删除 _per 和 parseInt

【讨论】:

    【解决方案2】:

    您可以在.map() 方法中使用.replace("_per",""),如下所示...

    $(function(){
    Obj = [
        {_name:"Jane", _id:"_per1"},
        {_name:"Jonas", _id:"_per2"},
        {_name:"Joakim", _id:"_per3"},
        {_name:"Johanna", _id:"_per4"}
        ]
        
        var d = Math.max.apply(Math,Obj.map(function(o){
            return o._id.toString().replace("_per","");
        }));
        alert('max id is :- ' + d)
        
        
    
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>

    请运行代码 sn-p ........ 它正在工作......!

    【讨论】:

    • @sumpen - 请检查上面的答案......它可以帮助你
    • 这对我有用。并且是迄今为止最干净的。谢谢!
    • 很高兴为您提供帮助 :-)
    【解决方案3】:

    如果_id 始终遵循_perX 的形式,您可以使用以下代码:

    var lastIndex = 0;
    
    Obj.forEach(function(el){
       var ind = parseInt(el["_id"].substring(el["_id"].lastIndexOf("r")+1));
       if(ind>lastIndex){
           lastIndex = ind;
       }
    });
    

    演示:

    Obj = [
        {_name:"Jane", _id:"_per1"},
        {_name:"Jonas", _id:"_per2"},
        {_name:"Joakim", _id:"_per30"},
        {_name:"Johanna", _id:"_per4"}
        ];
        
    var lastIndex = 0;
    
    Obj.forEach(function(el){
       var ind = parseInt(el["_id"].substring(el["_id"].lastIndexOf("r")+1));
       if(ind>lastIndex){
           lastIndex = ind;
       }
    });
    
    console.log(lastIndex);

    注意:

    • 它将使用substring()_id中提取最后一个索引 和lasIndexOf() 中的方法 el["_id"].substring(el["_id"].lastIndexOf("r")+1)
    • 这也适用于高于 10 的索引。
    • 我使用parseInt() 来解析提取的索引,以便在比较时给出正确的结果,因为如果你写"30">4,它会给你false,如果"30"string

    【讨论】:

      猜你喜欢
      • 2022-11-14
      • 2014-09-08
      • 2019-04-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多