javascript - 对象迭代跳过两位数?
问题描述
我正在尝试创建一个函数,该函数接受一个对象并返回一个具有最高和最低键的数组。我的问题是数组没有最高值而是第二高的值?我的代码在下面,即使我添加了第二个 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' }
我对最小值有零问题,它只是最大值。
我尝试更改条件,添加第二个条件,第二个循环并切换顺序,但结果保持不变。任何帮助,将不胜感激。
解决方案
正如其他人所说,表示整数索引号的对象属性实际上是字符串,因此比较它们将给出字符串比较的结果。
如果您的对象只有这样的索引属性——即标准十进制表示中最大为 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);
推荐阅读
- html - 背景图像的重复间隔
- google-apps-script - 如何在修改多个列时为它们输入多个时间戳?
- javascript - 使用标签按数据属性获取元素并添加禁用类
- python - 将具有不同形状的多个二维数组加载到三维上的新数组中
- flutter - Flutter :: qrscan.dart 包不起作用
- reactjs - 反应 shouldComponentUpdate 新旧道具相同
- ruby-on-rails - 这部电影在 X 年前的今天同一天创作
- c# - 如何使用内置 UITypeEditors 的控件?
- python - 矩阵大小与可变大小序列和 LSTM 的参差不齐的张量不兼容
- ios - 如何在 SpriteKit 中同步纹理动画和声音