Javascript 如何在JSON中找到最高键?

Javascript 如何在JSON中找到最高键?,javascript,node.js,json,Javascript,Node.js,Json,我正在使用的API返回的数据结构很差,如下所示: { "scsi0": "vm-101-disk-1.qcow2,size=32G", "scsi1": "vm-101-disk-2.qcow2,size=32G", "scsi2": "vm-101-disk-3.qcow2,size=32G" } 正如您所看到的,与其使用scsi对象,然后包含0,1,2键/值对,不如将键命名为这样的键 在JavaScript中,如何搜索最高的scsi值(在这种情况下为2?Object

我正在使用的API返回的数据结构很差,如下所示:

{
    "scsi0": "vm-101-disk-1.qcow2,size=32G",
    "scsi1": "vm-101-disk-2.qcow2,size=32G",
    "scsi2": "vm-101-disk-3.qcow2,size=32G"
}
正如您所看到的,与其使用
scsi
对象,然后包含
0,1,2
键/值对,不如将键命名为这样的键

在JavaScript中,如何搜索最高的
scsi
值(在这种情况下为
2

Object.keys()
是此类作业的良好起点。像这样的怎么样

var数据={
“scsi0”:“vm-101-disk-1.qcow2,大小=32G”,
“scsi1”:“vm-101-disk-2.qcow2,大小=32G”,
“scsi2”:“vm-101-disk-3.qcow2,大小=32G”
};
//获取数据的密钥
var keys=Object.keys(数据);
//获取数值数组
变量编号=keys.map(函数(键){
//从键中去除文本,将其解析为整数
返回parseInt(key.replace(/\D/g',)| | 0);
})
//获取数组中的最大数
var highest=Math.max.apply(null,数字);
//使用此数字生成数据密钥
var key=“scsi”+最高;
//获取与密钥相关的数据
var final=数据[键];
//记录结果

控制台日志(最终)在对象的
键上使用
减少

var o={
“scsi0”:“vm-101-disk-1.qcow2,大小=32G”,
“scsi11”:“vm-101-disk-2.qcow2,大小=32G”,
“scsi2”:“vm-101-disk-3.qcow2,大小=32G”
};
var max=对象键(o).reduce((m,k)=>+m.replace(/\D/g',)>+k.replace(/\D/g',)?m:m=k);

console.log(max,+max.replace(/\D/g,)
您可以使用一个collator来获得一个
比较
函数,该函数考虑了这些嵌入的数字:

const数据={
“scsi0”:“vm-101-disk-1.qcow2,大小=32G”,
“scsi11”:“vm-101-disk-2.qcow2,大小=32G”,
“scsi2”:“vm-101-disk-3.qcow2,大小=32G”
};
const cmp=(新的Intl.Collator(未定义,{numeric:true})).compare;
const max=Object.keys(data).reduce((a,b)=>cmp(a,b)>0?a:b);

console.log(max)
您尝试了什么?修复API以返回您需要的内容。到目前为止,我已经尝试了
JSON.stringify(stuff).lastIndexOf(“scsi”)
,但我对这个解决方案没有信心,因为如果项目的顺序因任何原因发生变化,结果将不会像预期的那样expected@KoshVery希望我能修复API,但它不在我的控制之下:(如果你的对象总是像你所展示的那样构造,那么
object.keys(stuff).length-1
会给你想要的结果。如果你添加key
scsi11
@charlietfl失败,我的坏!修复了。我已经添加了一个小的检查
key.startsWith(“scsi”)
,以防万一还有什么(例如
whatever99
)是API出于某种原因返回的。接受它,因为它是最可读的解决方案哇!太棒了!