如果他们不这样做,就从我的数组中删除东西't没有前缀

Remove thing from my array if they don't have a prefix

本文关键字:前缀 删除 这样做 他们 数组 我的 如果      更新时间:2024-02-02

这是我在这里的第一个问题,所以请注意:)

我有一个数组,里面有不同的名称。看起来像:["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", , ]。但它最终应该只有三个学生,而不是空的东西。

我做错什么了吗?

筛选学生,然后删除":"尝试

students_and_teachers.filter(function( name ) {
  return name.indexOf("student") > -1;
}).map(function( name ) {
  return name.split( ':' )[ 1 ];
});

结果将类似

 Array [ "Monica", "Rebecca", "James" ]

怎么样?

students_and_teachers.map(function( name ) {
  name = name.split( ':' );
  return name[ 0 ] === 'student' ? name[ 1 ] : '';
}).filter( Boolean );

参考:Array.prototype.filterArray.prototype.mapString.prototype.split

发布了一些不错的替代方案,但代码不起作用的原因是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);