首页 > 解决方案 > Javascript:找不到嵌套在对象中的数组的最大值

问题描述

我希望这段代码4作为数组的最大值返回obj.key,但是下面的代码却返回1

有人可以帮助解决这个问题,并以更短的方式实现这一目标吗?

var obj = {
  key: [1, 2, 4]
}
function getLargestElementAtProperty(obj, key) {
   if (!Array.isArray(obj[key])) {
      return undefined
   }
   for (num in obj[key]) {
      return Math.max(obj[key][num])
   }
}

var output = getLargestElementAtProperty(obj, 'key');
console.log(output); // --> expected 4

标签: javascript

解决方案


问题是一个函数只能返回一次。因此,当您第一次遍历数组并获得一个数组时,它会返回并且函数完成运行。Math.max()从 0 个或多个数字返回最大值,因此如果您只传递一个数字,它将始终返回相同的数字。像下面这样的东西会起作用。

const obj = {
  key: [1, 2, 4]
}
function getLargestElementAtProperty(obj, key) {
  let largest;
   if (!Array.isArray(obj[key])) {
      return undefined
   }
   for (num in obj[key]) {
      if (!largest || largest < obj[key][num]) {
        largest = obj[key][num];
      }
   }
   return largest;
}

var output = getLargestElementAtProperty(obj, 'key');
console.log(output); // --> expected 4

此外,如果您可以使用Math.max扩展运算符以更现代的 JavaScript 方式实现相同的目的,如下所示:

const obj = {
  key: [1, 2, 4]
}
function getLargestElementAtProperty(obj, key) {
   if (!Array.isArray(obj[key])) {
      return undefined
   }
   return Math.max(...obj[key]);
}

var output = getLargestElementAtProperty(obj, 'key');
console.log(output);

希望有帮助!


推荐阅读