【问题标题】:How do I loop over an array at a given key on an object?如何在对象的给定键处遍历数组?
【发布时间】:2019-04-16 19:39:51
【问题描述】:

我被分配创建一个函数,给定一个对象和一个键,返回一个数组,其中包含位于给定键的数组中小于 100 的所有元素。我想出了这个:

function getElementsLessThan100AtProperty(obj, key) {
  var lessThan100 = [];
  var targetedKey = obj[key];
  if (targetedKey === undefined) {
    return [];
  }
  for (i = 0; i < targetedKey.length; i++) {
    if (targetedKey[i] < 100) {
      lessThan100.push(targetedKey[i]);
    }
  }
return lessThan100;
}

现在这可行,但我想知道为什么我的原始代码没有。我试图通过编写下面的代码来循环给定属性的数组,但它不起作用。为什么我不能这样做?另外,有人会告诉我如何清理这段代码以使其更短吗?

for (i = 0; i <obj[key].length; i++) {
    if (obj[key[i]].length < 100) {
      lessThan100.push(obj[key[i]]);
    }

【问题讨论】:

    标签: javascript arrays object for-loop


    【解决方案1】:

    在您修改后的代码中,您正在检查数组中项目的 length 是否小于 100,而不是项目的 value 是否小于 100。您应该检查 值(即

    【讨论】:

    • 哇,非常感谢。通常,当我犯了如此明显的错误时,我会在一段时间远离问题并用新的眼光重新审视它之后才发现它。我每天都在重复这个问题,但我没有发现。
    • 如果属性 obj[key] 不存在,该函数应该返回一个空数组。我必须为此使用 if 语句还是有其他方法?
    • 您可以新建一个空数组,然后将项目(如果存在)推入其中。最后,返回数组。如果没有添加任何内容,您将返回新添加的空数组。
    【解决方案2】:

    因为obj[key[i]] 必须是obj[key][i],所以您还要检查 length 是否小于 100,这可能不是您的意图。

    整个代码可以写成:

     const getLessThanHundred = (obj, key) =>
       obj[key].filter(it => it < 100);
    

    【讨论】:

    • 哇。我还不熟悉这种技术,但它确实有效。我刚刚开始学习编码并从 hackreactor 进行训练营面试培训计划,所以我对 javascript 仍然非常陌生。感谢您的帮助。
    • @sheridan 很高兴为您提供帮助 :)
    猜你喜欢
    • 2022-11-17
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多