如果没有前缀,请从我的数组中删除它

时间:2015-02-19 14:42:24

标签: javascript

这是我在这里的第一个问题,所以请保持友善:)

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

我做错了吗?

3 个答案:

答案 0 :(得分:0)

那怎么样?

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

参考:Array.prototype.filterArray.prototype.mapString.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

&#13;
&#13;
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;
&#13;
&#13;