1

我正在尝试返回具有以下格式的数组:[lowestKey,highestKey]。这样做最简单的方法是什么?我使用了一个 for 循环(还没有完成),我不知道下一步该怎么做?

为了清楚起见:该函数应该接受一个对象并返回一个最低和最高键的数组。

这是我到目前为止所拥有的:

function minMaxKeyInObject(arr) {
  let min = arr[0].y, max = arr[0].y;

  for (let i = 1, len=arr.length; i < len; i++) {
    let v = arr[i].y;
    min = (v < min) ? v : min;
    max = (v > max) ? v : max;
  }

  return [min, max];
}

console.log(
  minMaxKeyInObject({ 2: 'a', 7: 'b', 1: 'c', 10: 'd', 4: 'e' }),
  minMaxKeyInObject({ 1: 'Elie', 4: 'Matt', 2: 'Tim' })
  );

我正在尝试返回[1, 10][1, 4]

4

2 回答 2

4

Object.keys()获取密钥,然后只需返回一个带有Math.min()/的数组Math.max()

function minMaxKeyInObject(obj) {
  let keys = Object.keys(obj);

  return [Math.min(...keys), Math.max(...keys)];
}

console.log(
  minMaxKeyInObject({2: 'a',7: 'b',1: 'c',10: 'd',4: 'e'}),
  minMaxKeyInObject({1: 'Elie',4: 'Matt',2: 'Tim'})
);

于 2019-12-30T20:02:38.010 回答
1

您不能在 JS 对象上使用长度。您需要遍历您的密钥并找到最大值和最小值

function minMaxKeyInObject(arr) {
  let min, max;
  let first = true;
  for (var keyval in arr) {
    if (first) {
      min = keyval;
      max = keyval;
      first = false;
    } else {
      let v = keyval;
      min = (v < min) ? v : min;
      max = (v > max) ? v : max;
    }
  }
  return [min, max];
}
于 2019-12-30T20:03:22.347 回答