这个键的数值是一个数组吗?

时间:2017-02-09 20:35:30

标签: javascript arrays object

我编写了以下函数来返回对象中给定键的数组的所有数字的平均值:

var obj = {
  key: [1, 2, 3]
};
function getAverageOfElementsAtProperty(obj, key) {
  if (!(key in obj)) {
    return 0;
  } else if (obj[key].length === 0) {
    return 0;
  } else {
    var total = 0;
    for (i = 0; i < obj[key].length; i++) {
      total += obj[key][i];
    }
    return total/(obj[key].length);
  }
}
console.log(getAverageOfElementsAtProperty(obj, "key"));

一切都很好,除了我需要在else语句之前添加一个else if语句,检查该键的值是否为数组。如果不是,它应该返回0.我已经想办法做到这一点,但没有一个有效。

4 个答案:

答案 0 :(得分:4)

使用instanceof

var obj = {
  k1: [1, 2, 3],
  k2: null,
  k3: "string",
  k4: 5
};

function getAverageOfElementsAtProperty(obj, key) {
  if (!(obj[key] instanceof Array) || obj[key].length == 0) {
    return 0;
  } else {
    var total = 0;
    for (i = 0; i < obj[key].length; i++) {
      total += obj[key][i];
    }
    return total / (obj[key].length);
  }
}
console.log(getAverageOfElementsAtProperty(obj, "k1"))
console.log(getAverageOfElementsAtProperty(obj, "k2"))
console.log(getAverageOfElementsAtProperty(obj, "k3"))
console.log(getAverageOfElementsAtProperty(obj, "k4"))
console.log(getAverageOfElementsAtProperty(obj, "k5"))

答案 1 :(得分:0)

要检查特定属性是否为数组,请使用“instanceof”运算符。

在您的情况下,添加以下条件。

else if(! (obj.key instanceof Array)) {
return 0
}

答案 2 :(得分:0)

如果你说你已经找到了方法,但他们没有工作,你有什么尝试,你找到了什么问题?

Array.isArray函数,它将返回一个布尔值。

Array.isArray([]); // true

答案 3 :(得分:0)

您可以使用Array.isArray(obj [key])

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

function getAverageOfElementsAtProperty(obj, key) {

  if(!(key in obj)){
    return 0;
  }

  if(!Array.isArray(obj[key])){
    return 0;
  }

  if(obj[key].length === 0){
    return 0;
  }

  return obj[key].reduce(function(op1, op2){
       return op1 + op2;
  },  0)/obj[key].length
}