首页 > 解决方案 > 对象迭代跳过两位数?

问题描述

我正在尝试创建一个函数,该函数接受一个对象并返回一个具有最高和最低键的数组。我的问题是数组没有最高值而是第二高的值?我的代码在下面,即使我添加了第二个 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' }

我对最小值有零问题,它只是最大值。

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

标签: javascriptarrays

解决方案


正如其他人所说,表示整数索引号的对象属性实际上是字符串,因此比较它们将给出字符串比较的结果。

如果您的对象只有这样的索引属性——即标准十进制表示中最大为 2 32 -1 的非负整数——那么它们将按数字顺序迭代(另请参见this)。因此,除了获取第一个和最后一个逻辑之外,您不需要任何其他逻辑:

let obj = { 2: 'Jim', 1: 'Max', 4: 'Leia', 11: 'Jacob', 7: 'Bob', 8: 'Kim', 3: 'Billy' }

let minmax = Object.keys(obj);
minmax = [+minmax[0], +minmax.pop()];

console.log(minmax);


推荐阅读