我正在尝试从混合数组中获取所有字符串的平均长度。但在我计算之前,我只想关注这项任务的一部分

I am trying to get the average length of all strings from a mixed array. But before I count, I want to only focus on the one part of this task

提问人:VaQuellJQL 提问时间:9/28/2023 更新时间:9/28/2023 访问量:24

问:

好吧,到目前为止,我已经完成了:

  1. 我分配了两个变量 - 一个是混合数组,另一个是空的,所以我可以将字符串从第一个推到第二个。
  2. 我使用了循环,因此程序可以检查数组的每个元素。for
  3. 我设置了条件语句:如果特定元素的类型是字符串,那么它将被推送到这个空数组中;
  4. 但如果是其他任何东西,那么它将被推回原始数组。
  5. 在所选 ID 处显示由第一个数组中的字符串填充的新数组。
  6. 调用函数。 但随后弹出“RangeError: invalid array length”。我不知道出了什么问题,甚至不知道如何解决这个问题。有什么想法吗?

完整代码:

<!DOCTYPE html>
<html>
<head>
  <title>Task number five</title>
</head>
<body>
  <h2>Average length of the string in this array:</h2>
  <p id="averageLength"></p>
  <br>
  <h2>The sum of all the numbers in this array:</h2>
  <p id="sumNumbers"></p>
  <script>
    const firstArray = ["String 1", { name: "Lola" }, 2, 32.22024, false, 2.1112, true, "String 2", "String 3", "Jim likes dogs", [], {}]
    const stringArray = [];
    function countAverageString(data) {
      for ( let i = 0; i < data.length; i++) { 
        if (typeof data[i] === "") {
          stringArray.push(data[i]);
        }
        else {
          firstArray.push(data[i]);
        }}
        return firstArray;
        return stringArray;
        document.getElementById("sumNumbers").innerHTML = stringArray;
       }
    countAverageString(firstArray);

  </script>
</body>
</html>

起初,我在条件语句的末尾没有“return”,因此我虽然它丢失了。但它不是,现在也不是问题,因为它与长度无关,所以在这一点上我什至不知道出了什么问题。

JavaScript 数组函数 if-statement

评论

1赞 InSync 9/28/2023
typeof 从不返回 。''
0赞 Scott Marcus 9/28/2023
仅供参考,您没有正确使用 HTML 元素。页面上的第一个标题元素应为 .然后,如果要创建页面的子部分,下一个标题将是 ,如果需要细分 ,则使用 ,依此类推。不应根据浏览器设置文本样式的方式选择标题,它们是为了定义文档结构并帮助那些依赖屏幕阅读器的人。H2H1h2h2h3
0赞 Scott Marcus 9/28/2023
此外,元素旨在分解块级元素,因此它们不应位于元素之外,也不应该用于为整个文档布局添加额外的垂直空间。brp

答:

0赞 Orifjon 9/28/2023 #1

您在这里有多个问题。首先,您不必将当前对象推回原始数组。当你阅读它时,它会停留在那里。其次,一旦您从函数返回,函数的其余部分就不会执行。

查看文档类型,了解如何使用它。我还建议研究一下数组的过滤方法。

更新后的方法:countAverageString

// rest of your code
    function countAverageString(data) {
      for ( let i = 0; i < data.length; i++) { 
        if (typeof data[i] === "string") {
          stringArray.push(data[i]);
        }
      }
      document.getElementById("sumNumbers").innerHTML = stringArray;
    }
    countAverageString(firstArray);

或者你可以做:

const stringArray = firstArray.filter(i => typeof i === "string");