如何提取和操作数组中的项Javascript

vktxenjb  于 2023-01-24  发布在  Java
关注(0)|答案(3)|浏览(129)

我是一个很新的Javascript和我正在努力与我的作业之一。
这是上下文:
操作此数据
变量等级="jim|25岁,苏|32岁玛丽|34岁,安|22岁,泰德|28岁,弗兰克|15、丽莎|19,麦克|30安|26岁,毗瑟奴|27英寸;
使用内联JavaScript代码创建一个HTML页面,以更易读的格式显示学生数据,如下所示:
名称1-评分1
名称2-评分2
您的程序应该:

  • 显示每个学生的姓名和分数
  • 学生姓名的第一个字母大写
  • 显示学生总数,
  • 显示最低、最高和平均分数

现在,我能够以更易读的格式打印姓名和成绩,但我不知道如何将每个姓名的第一个字母大写,以及如何输出最低、最高和平均成绩。
下面是我的代码:

<body>
    <p id="demo"></p>
    <script>
      var grades =
        "jim|25, sue|32, mary|34, ann|22, ted|28, frank|15, lisa|19, mike|30, ahn|26, vishaya|27";

      let result = grades.split(", ");

      function getNameAndGrade(Str) {
        for (let i in result) {
          document.write(
            ` <b>Name: </b>${result[i].slice(
              0,
              result[i].indexOf("|")
            )} <b>Grade: </b>${result[i].slice(-2)} <br>`
          );
        }
      }
      getNameAndGrade(grades);
    </script>
  </body>
ffx8fchx

ffx8fchx1#

以下是一种将每个姓名的首字母大写并输出最低、最高和平均成绩的方法:

<body>
    <p id="demo"></p>
    <script>
        var grades = "jim|25, sue|32, mary|34, ann|22, ted|28, frank|15, lisa|19, mike|30, ahn|26, vishaya|27";
        let result = grades.split(", ");
        let scores = [];
        let names = [];

        for (let i in result) {
            let name = result[i].slice(0, result[i].indexOf("|"));
            names.push(name.charAt(0).toUpperCase() + name.slice(1));
            scores.push(parseInt(result[i].slice(-2)));
        }

        // Capitalize first letter of name
        for (let i in names) {
            document.write(`<b>Name: </b>${names[i]} `);
        }

        // Display the lowest, highest, and average scores
        let lowest = Math.min(...scores);
        let highest = Math.max(...scores);
        let average = (scores.reduce((a, b) => a + b, 0)) / scores.length;

        document.write(`<br><b>Lowest: </b>${lowest}`);
        document.write(`<br><b>Highest: </b>${highest}`);
        document.write(`<br><b>Average: </b>${average}`);
        document.write(`<br><b>Total: </b>${scores.length}`);

    </script>
</body>

在这段更新后的代码中,我首先使用两个数组分别存储姓名和分数,然后使用for循环遍历names数组,并使用charAt(0).toUpperCase()方法将每个姓名的首字母大写。并使用Array.prototype.push()方法将大写名称添加到names数组中。我使用了另一个for循环来迭代scores数组,并使用Math.min()Math.max()方法来查找最低分和最高分,然后我用scores.reduce()方法求出平均分,我还用scores.length求出学生总数。

ubbxdtey

ubbxdtey2#

你需要一些重构。
首先,不要让你的函数直接写DOM,而是让它返回你想要的数据,并且更喜欢模块化结构(函数很小,只执行一个微小的特定任务)

function getNameAndGrade(couple) {
    return {
        name: couple.split('|')[0],
        score: couple.split('|')[1]
    }
}

要将第一个字母大写,请使用substring方法(0是子字符串的位置,1是子字符串的长度)获取它,然后使用capitalize将其大写,然后使用substring(1)添加字符串的其余部分(1表示没有第一个字母)。

function capitalizeFirstLetter(string) { 
    string.substring(0, 1).toUpperCase() + string.substring(1)
}

将逻辑和视图分开是一个很好的做法。这意味着,一个函数用于计算,另一个函数用于将其写入屏幕。这有助于重用代码。

function displayCouples(couples) {
    const displayData = couples.map(couple => 
        `<b>${capitalizeFirstLetter(couple.name)}</b>: ${couple.score}`
    )
    document.getElementById('demo').innerHTML = displayData
}

为了得到最小值,最大值和平均值,我们使用map方法,它唯一要做的就是把score而不是整个名称和score对象放入我们的数学函数中,它告诉javascript取score字段而不是整个对象。

function getAverageScore(couples) {
    return Math.sum(...pairs.map(couple => couple.score)) / couples.length
}

function getMaxScore(couples) {
    return Math.max(...couples.map(couple => couple.score))
}

function getMinScore(couples) {
    return Math.min(...couples.map(couple => couple.score))
}

这里所有的工作:

const input = "jim|25, sue|32, mary|34, ann|22, ted|28, frank|15, lisa|19, mike|30, ahn|26, vishaya|27"

// we use hetNameAndGrade inside map function. It means, we apply this function to every pair of name and score
const pairs = input.split(', ').map(getNameAndGrade)

displayCouples(pairs)

const min = getMaxScore(pairs)
const max = getMaxScore(pairs)
const average = getAverageScore(pairs)
ebdffaop

ebdffaop3#

对于大写单词,可以混合使用三个函数:x一个一个一个一个一个一个一个一个一个一个一个和x一个一个一个一个二个一个。
charAt()函数用于返回字符串中给定位置的字符。示例:

const str = 'javascript';
const str2 = str.charAt(0);
console.log(str2);

//Output: j

toUpperCase()函数用于将输入字符串中的所有字符转换为大写。示例:

const str = 'javascript';
const str2 = str.toUpperCase();
console.log(str2);

//Output: JAVASCRIPT

现在,所有的字符都大写了。但是,我们只需要首字母大写。要大写字符串的第一个字符,我们可以使用charAt()分隔第一个字符,然后使用toUpperCase()函数将其大写。现在,我们将使用slice()函数获得字符串的其余字符。
slice()函数用于从指定的“开始”位置到指定的“结束”位置对给定字符串进行切片。例如:

const str = 'javascript';
const str2 = str.slice(1);
console.log(str2);

//Output: avascript

所以,我们用这三个字母来大写首字母。

const str = 'javascript';
const str2 = str.charAt(0).toUpperCase() + str.slice(1);
console.log(str2);

//Output: Javascript

相关问题