【问题标题】:Difference between normal for loop and for...in?普通 for 循环和 for...in 之间的区别?
【发布时间】:2017-12-05 03:16:35
【问题描述】:

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

给定一个对象和一个键,“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;
}

据我了解,循环和随后的条件推送具有相同的逻辑。为什么一个比另一个更有效?

【问题讨论】:

标签: javascript object for-loop properties


【解决方案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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-25
    • 2018-06-30
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多