Javascript 对象迭代跳过两位数?

Javascript 对象迭代跳过两位数?,javascript,arrays,Javascript,Arrays,我试图创建一个函数,它接受一个对象并返回一个具有最高和最低键的数组。我的问题是数组没有最高的值,而是第二高的值?我的代码在下面,即使我添加了第二个while值(max的另一个循环),它仍然会得到第二个最高值 function minMaxKeyInObject(obj) { let newArr = []; let min; let max; for (let i in obj) { if (min === undefined || i < min) {

我试图创建一个函数,它接受一个对象并返回一个具有最高和最低键的数组。我的问题是数组没有最高的值,而是第二高的值?我的代码在下面,即使我添加了第二个while值(max的另一个循环),它仍然会得到第二个最高值

function minMaxKeyInObject(obj) {
  let newArr = [];
  let min;
  let max;
  for (let i in obj) {
    if (min === undefined || i < min) {
      min = i;
    }
    if (i > max){
      max = i;
    }
  }
  for (let j in obj) {
    // console.log(j)
    if (max === undefined || j > max) {
      max = j;
    }
  }
  newArr.unshift(max);
  newArr.unshift(min);
  return newArr;
}
let obj = { 1: 'Max', 2: 'Jim', 4: 'Leia', 11: 'Jacob', 7: 'Bob', 8: 'Kim', 3: 'Billy' }
函数minMaxKeyInObject(obj){
设newArr=[];
让敏;
让马克斯;
用于(让我输入obj){
if(min==未定义的| | imax){
max=i;
}
}
for(让j在obj中){
//控制台日志(j)
如果(max==未定义| | j>max){
max=j;
}
}
新到达未移位(最大值);
新到达取消移位(最小值);
返回newArr;
}
让obj={1:Max',2:Jim',4:Leia',11:Jacob',7:Bob',8:Kim',3:Billy'}
我对最小值没有任何问题,只是最大值


我尝试过更改条件,添加第二个条件,第二个循环,并切换顺序,但结果保持不变。任何帮助都将不胜感激。

尝试使用
Object.keys
Math.[min/max]
来确定最小值和最大值。或者对键进行排序并返回结果的第一个和最后一个值(
minMax

对象的键总是
字符串
,因此必须先将它们转换为
数字
,然后才能使用它们:

key()返回元素为字符串的数组 对应于直接在对象上找到的可枚举属性

const obj={1:'Max',2:'Jim',4:'Leia',11:'Jacob',7:'Bob',8:'Kim',3:'Billy'};
常量键=Object.keys(obj.map)(编号);
log(JSON.stringify([Math.min.apply(null,key),Math.max.apply(null,key)]);
log(JSON.stringify(minMax(keys));
函数最小最大值(值){
const toNumber=values.map(数字);
如果(!toNumber.filter(v=>isNaN(v)).length){
t编号排序((a,b)=>a-b);
返回[toNumber[0],toNumber.pop()];
}
返回“并非所有值都是数字”;

}
对象将其键存储为字符串或字符串。因此,当您迭代对象的键时,
i
将是字符串而不是数字。当您比较数字的字符串版本时,您的比较将产生不理想的结果。例如,当代码执行以下操作时:

"11" > "4"
您会得到
false
,因此
max
不会更新。相反,请先将密钥转换为数字,然后进行比较

您还可以删除第二个循环,因为您已经在第一个循环中找到了最大值。您还可以更轻松地将最小值/最大值默认为
无穷大
-无穷大
,这样,当您将任何数字与默认值进行比较时,它们将自动采用新值:

函数minMaxKeyInObject(obj){
设min=无穷大;
设max=-无穷大;
用于(让我输入obj){
设keyNum=Number(i);
如果(keyNummax)
max=keyNum;
}
返回值[最小值,最大值];
}
让obj={1:'Max',2:'Jim',4:'Leia',11:'Jacob',7:'Bob',8:'Kim',3:'Billy'};

log(minMaxKeyInObject(obj))如其他人所述,表示整数索引号的对象属性实际上是字符串,因此比较它们将得到字符串比较的结果

如果您的对象只有这样的索引属性,即最多232个非负整数−1的标准十进制表示形式——然后它们将按数字顺序迭代(另请参见)。因此,除了获取第一个和最后一个逻辑,您不需要任何其他逻辑:

让obj={2:Jim',1:Max',4:Leia',11:Jacob',7:Bob',8:Kim',3:Billy'}
设minmax=Object.keys(obj);
minmax=[+minmax[0],+minmax.pop()];

console.log(minmax)如何调用函数您可以像console.log(minMaxKeyInObject(obj))那样调用它;我测试过,它返回[“1”,“8”]