如何找到一个数组的多个索引值以调用另一个数组,javascript

问题描述 投票:0回答:3

这是我到目前为止所拥有的。我有两个数组,我找到了数字数组'grade'(等级> = 60)的条件值,现在我试图查找与那些>> 60的数组值相对应的索引值,这样然后,我可以在另一个数组“名称”上调用这些索引,以返回与及格成绩相对应的学生“名称”。

非常感谢任何指针或技巧,谢谢。

let total = 0;
let highest = 0;
let stuAvg= 0;  
let arr = [];


var names= [];
var grade= [];
var pos1 = [];



for (var i = 0; i < 10; i++) {             
    names.push(prompt('Enter The Ten Student Names | Student: ' + (i + 1))); 
    document.getElementById("stuNames").innerHTML=("Student's Names:" +names.join(','));
}
for (var i = 0; i < 10; i++) {              
    grade.push(Number(prompt('Enter The Ten Student Grades | Grade: ' + (i + 1))));
    total +=grade[i]; 
    stuAvg = total / grade.length;
    highest = Math.max(...grade);


    document.getElementById("stuGrades").innerHTML=("Student's Grades:" +grade.join(','));
}
function passing(grade) {
    return grade >= 60; 
}

function results() {
    pos1 = grade.indexOf(highest);
    arr = grade.filter(passing);


    document.getElementById("result").innerHTML=("Highest Grade:"+highest+"The Highest Grade 
          Belongs to:"+names[pos1]+" The Average Grade is "+stuAvg+"");
    document.getElementById("passing").innerHTML=("The Students who are passing are 
          "+arr+","+names+"");     
}
javascript arrays indexof
3个回答
0
投票

此行之后:

total +=grade[i];

如果是及格分数,则将该学生的索引添加到passingGradeIndexes数组中:

if (passing(grade[i])) passingGradeIndexes.append(i);

然后输出名称:

for (var i = 0; i < passingGradeIndexes.Length; i++) {
document.Write( names[passingGradeIndexes[i]] );
}

0
投票

它说您是新的贡献者。欢迎来到社区。以下是有关如何改进代码的一些技巧。

1。不要缩写

虽然缩写了一些公认的技术术语和惯例,例如HTMLCSSXHR,但请勿在代码中缩写诸如students的词。缩写的做法来自计算机内存有限且屏幕很小的时候,您只能在每行中输入一百个字符之类的东西。

2。使用函数并命名好

我认为您想做的是输入学生的姓名和成绩,并获取一些静态信息,对吗?如果是这样,您可以编写如下代码:

function getStudentNames() { /* write your code here */ }
function getStudentGrades() { /* write your code here */ }
function analyse(students, grades) { /* write your code here */ }
function renderResults(analysis) { /* write your code here */ }

// and then run the whole thing here:
function main() {
  var students = getStudentNames()
  var grades = getStudentGrades()
  var analysis = analyze(students, grade)
  renderResults(analysis)
}

有了这种结构,我们只需要担心为每个功能填写表示/* write your code here */的部分。这只是您可能希望如何构造代码的一个示例。正如您稍后在开发人员的旅程中学习的那样,这使以后的测试更加容易。

通常来说,当您命名一个函数时,您想使用以下格式命名它:verbNoun()。例如,您可能会看到fetchData()renderImage()getShape()等功能。有时,您会看到不遵循此功能的功能,例如then()render()。无论如何,请勿使用名词作为函数名称。

3。了解(更多)数组方法。

尽管使用for循环有一些优势,但在大多数情况下,性能提升可忽略不计,使用数组方法可提供清晰性和可读性。

例如,对一个数字数组求和可以如下:

var sum = [0,1,2,3,4].reduce(function(current, sum) {
  return current + sum
}, 0)

// more modern
const sum = [0,1,2,3,4].reduce((current, sum) => current + sum, 0)

console.log(sum) // prints 10

可在Mozilla Developers Network处找到有用的信息,这通常是学习任何与Web相关的知识的绝佳来源。

-

我希望这会有所帮助


0
投票

您可以在进行过滤时将这些索引存储在另一个数组中。

function results() {
    
    pos1 = grade.indexOf(highest);
    
    var passingStudents = []; // to store passing indexes
    arr = grade.filter((grade, index) => {
        var pass = grade >= 60;
        if(pass){
          passingStudents.push(index);
        }
        return pass;
    
    });
    passingStudents = passingStudents.map(index => names[index]); // change indexes for names

    document.getElementById("result")
        .innerHTML=("Highest Grade:"+highest
          +"\n The Highest Grade Belongs to:"+names[pos1]
          +"\nThe Average Grade is "+stuAvg+"");
    document.getElementById("passing")
        .innerHTML=("The Students who are passing are: " + passingStudents.join(", "));     
}

现在您在另一个数组中有了所需的索引。

© www.soinside.com 2019 - 2024. All rights reserved.