在属性中获取最大的元素

时间:2018-12-28 22:53:00

标签: javascript arrays

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

  • 如果数组为空,则应返回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;
}

1 个答案:

答案 0 :(得分:4)

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

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