【问题标题】:Get the largest element at the property获取属性中的最大元素
【发布时间】:2018-12-28 22:53:00
【问题描述】:

我正在尝试获取给定数组中的最大元素,以下是要求:

  • 如果数组为空,则返回 undefined。
  • 如果给定键的属性不是数组,它应该返回 undefined。
  • 如果键没有属性,它应该返回 undefined。

    var obj = { 键:[1、2、4] };

谁能解释一下为什么我放的时候

!obj.hasOwnProperty(key)

IF 函数的末尾我得到错误:如果属性不存在,应该返回 undefined。 但是当我把它放在 的开头时strong>IF 函数,它通过没有问题。

var obj = {
  key: [1, 2, 4]
};

function getLargestElementAtProperty(obj, key) {
  if (obj[key].length === 0 || !Array.isArray(obj[key]) || !obj.hasOwnProperty(key)) {
    return undefined;
  }
  var largestElement = 0;
  for (var i in obj[key]) {
    if (largestElement < obj[key][i]) {
      largestElement = obj[key][i];
    }
  }
return largestElement;
}

【问题讨论】:

  • 0 可能适合您的情况,但通常最好将初始最小值设置为数组中的值(通常是第一个值)。这也可以保存数组是否为空的检查,因为从空数组中获取元素会导致未定义。

标签: javascript arrays


【解决方案1】:

!obj.hasOwnProperty(key) 放在 if 语句的开头时,如果对象没有指定的键(因此 !obj.hasOwnProperty(key) 产生 true),由于 OR short-circuiting 将不会评估其他检查(简而言之,如果任何条件评估为 true,则不会评估其他检查,因为整个表达式将始终为 true)。

但是,当放在 if 语句的末尾时,obj[key].length === 0 将首先被评估。如果obj[key] === undefined,则在评估obj[key].length 时会出错,因为undefined 没有属性length。具体来说,错误是:TypeError: Cannot read property 'length' of undefined

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2012-09-30
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多