这是我在这里的第一个问题,所以请保持友善:)
我有一个不同名字的数组。这看起来像是:["student:Monica", "student:Rebecca", "student:James", "teacher:Mr. Anders"]
。
实际上,那里有更多的名字。由此,我想只与学生一起制作一个列表,不应该在它前面说student:
。
所以我试着这样做:
var students_and_teachers = ["student:Monica", "student:Rebecca", "student:James", "teacher:Mr. Anders"];
for (i = 0; i < students_and_teachers.length; i++) {
var a_student_or_teacher = students_and_teachers[i];
if (a_student_or_teacher.startsWith("student:") === true) {
students_and_teachers[i] = a_student_or_teacher.substring(8, 100);
} else {
delete students_and_teachers[i];
}
}
这很好但现在当我向学生和老师展示它看起来像那样:Array [ "Monica", "Rebecca", "James", , ]
。但它应该只有三个学生,而不是最后的空白。
我做错了吗?
答案 0 :(得分:0)
那怎么样?
students_and_teachers.map(function( name ) {
name = name.split( ':' );
return name[ 0 ] === 'student' ? name[ 1 ] : '';
}).filter( Boolean );
参考:Array.prototype.filter
,Array.prototype.map
,String.prototype.split
答案 1 :(得分:0)
过滤学生,然后删除“:”尝试
students_and_teachers.filter(function( name ) {
return name.indexOf("student") > -1;
}).map(function( name ) {
return name.split( ':' )[ 1 ];
});
结果将类似于
Array [ "Monica", "Rebecca", "James" ]
答案 2 :(得分:0)
发布了很多替代方案,但您的代码无法正常工作的原因是因为delete
没有删除数组元素 - 它只是将其保留为未定义。
您可以使用splice
删除数组元素。
一旦删除了元素,就需要递减循环变量(i--
)。否则,它将跳过下一个元素。
我的代码段使用indexOf
,因为大多数浏览器还不支持
startsWith
var students_and_teachers = [
"student:Monica",
"student:Rebecca",
"student:James",
"teacher:Mr. Anders",
"teacher:Ms. Jones",
"student:Rick"
];
for (i = 0; i < students_and_teachers.length; i++) {
var a_student_or_teacher = students_and_teachers[i];
if (a_student_or_teacher.indexOf("student:") === 0) {
students_and_teachers[i] = a_student_or_teacher.substring(8, 100);
} else {
students_and_teachers.splice(i,1);
i--;
}
}
alert(students_and_teachers);
&#13;