正常for循环和for ... in?之间的区别?

时间:2017-12-05 03:16:36

标签: javascript object for-loop properties

我正在尝试编写一个函数来满足以下要求:

给定一个对象和一个键," getElementsThatEqual10AtProperty"返回一个数组,其中包含位于给定键的数组中所有等于10的元素。

注意:

  • 如果数组为空,则应返回一个空数组。
  • 如果数组中不包含任何元素等于10,则应返回 一个空数组。
  • 如果给定键的属性不是数组,则应返回一个 空阵列。
  • 如果密钥没有属性,则应返回一个空数组。

示例:

var obj = {
  key: [1000, 10, 50, 10]
};
var output = getElementsThatEqual10AtProperty(obj, 'key');
console.log(output); // --> [10, 10]

方法#1(最后一点失败*如果键上没有属性,它应该返回一个空数组。):

function getElementsThatEqual10AtProperty(obj, key) {

  var output = [];
  for (var i = 0; i < obj[key].length; i++) {
    if (obj[key][i] === 10) {
      output.push(obj[key][i]);
    }
  }
 return output;
}

方法#2全部通过:

function getElementsThatEqual10AtProperty(obj, key) {

  var output = [];
  for (let i in obj[key]) {
    if (obj[key][i] === 10) {
      output.push(obj[key][i]);
    }
  }
  return output;
}

根据我的理解,循环和后续条件推送都具有相同的逻辑。为什么一个人在另一个人工作?

1 个答案:

答案 0 :(得分:1)

你让它变得比它需要的更复杂。我会这样做:

function getSameVals(yourArray, val){
  var a = [];
  for(var i=0,l=yourArray.length; i<l; i++){
    if(yourArray[i] === val){
      a.push(val);
    }
  }
  return a;
}
var ten = getSameVals(obj.key, 10);
console.log(ten);