2016-02-26 61 views
1

我正在学习js,我想尝试把我学到的一些基础知识到目前为止。更高效的方式substr到第一个空白在这个()循环

下面是我的,我只是想知道是否有一个更有效的方式让我得到名称直到第一个空白,而不是每个循环都做?

例如我的代码将记录(仅第一个循环)

汉密尔顿有偶数驱动编号,这是44 为 梅赛德斯刘易斯驱动器。

我只在for()循环得到名字刘易斯这完全实际上是汉密尔顿,加入这我循环team[i].name.substr(0,team[i].name.indexOf(' '))这是越来越一切都交给第一个白色空间。

可以/我应该在循环之外做到这一点,是否有任何意见,如果有的话,它会更有效率吗?这只是我的一个想法,我不知道是否为每个循环做了这样的工作,为每个循环添加额外的工作,当时我可以“预先定义”它。但我不想通过创建一个简单地列出名字的数组来预定义它,但我不能回答我的查询。

我可以以某种方式在所有全名的循环之外做它,并使它们像team[i].firstname一样,所以它只是将它们添加进去,而不是每次都将子空间添加到第一个空白区域。

我希望是有道理的:)

function Driver (name, car, number) { 
 
    this.name = name; 
 
    this.car = car; 
 
    this.number = number; 
 
} 
 

 
var team = []; 
 

 
team[0] = new Driver ("Lewis Hamilton", "Mercedes", 44); 
 
team[1] = new Driver ("Nico Rosberg", "Mercedes", 6); 
 
team[2] = new Driver ("Sebastian Vettel", "Ferrari", 5); 
 
team[3] = new Driver ("Kimi Raikkonen", "Ferrari", 7); 
 
team[4] = new Driver ("Fernando Alonso", "McLaren", 14); 
 
team[5] = new Driver ("Jenson Button", "McLaren", 22); 
 
team[6] = new Driver ("Daniel Ricciardo", "Red Bull", 3); 
 
team[7] = new Driver ("Daniil Kyvat", "Red Bull", 26); 
 
team[8] = new Driver ("Felipe Massa", "Williams", 19); 
 
team[9] = new Driver ("Valtteri Bottas", "Williams", 77); 
 

 
for (var i = 0; i < team.length; i++) { 
 
    if (team[i].number % 2 === 0) { 
 
    console.log(team[i].name + " has an even driver number, it's " + team[i].number + ". " + team[i].name.substr(0,team[i].name.indexOf(' ')) + " drives for " + team[i].car + "."); 
 
    } else { 
 
    console.log(team[i].name + " has an odd driver number, it's " + team[i].number + ". " + team[i].name.substr(0,team[i].name.indexOf(' ')) + " drives for " + team[i].car + "."); 
 
    } 
 
};

回答

2

我可以建议你可以用一个叫firstName例如新特性使它在构造函数中:

function Driver (name, car, number) { 
    this.name = name; 
    this.firstName = name.split(" ")[0]; // this is the new line; 
    this.car = car; 
    this.number = number; 
} 

然后你可以这样访问:

team[i].name + " has an even driver number, it's " + team[i].number + ". " + team[i].firstName + " drives for " + team[i].car + "."; 

给你完整的工作片段:

function Driver (name, car, number) { 
 
    this.name = name; 
 
    this.firstName = name.split(" ")[0]; 
 
    this.car = car; 
 
    this.number = number; 
 
} 
 

 
var team = []; 
 

 
team[0] = new Driver ("Lewis Hamilton", "Mercedes", 44); 
 
team[1] = new Driver ("Nico Rosberg", "Mercedes", 6); 
 
team[2] = new Driver ("Sebastian Vettel", "Ferrari", 5); 
 
team[3] = new Driver ("Kimi Raikkonen", "Ferrari", 7); 
 
team[4] = new Driver ("Fernando Alonso", "McLaren", 14); 
 
team[5] = new Driver ("Jenson Button", "McLaren", 22); 
 
team[6] = new Driver ("Daniel Ricciardo", "Red Bull", 3); 
 
team[7] = new Driver ("Daniil Kyvat", "Red Bull", 26); 
 
team[8] = new Driver ("Felipe Massa", "Williams", 19); 
 
team[9] = new Driver ("Valtteri Bottas", "Williams", 77); 
 

 
for (var i = 0; i < team.length; i++) { 
 
    if (team[i].number % 2 === 0) { 
 
    console.log(team[i].name + " has an even driver number, it's " + team[i].number + ". " + team[i].firstName + " drives for " + team[i].car + "."); 
 
    } else { 
 
    console.log(team[i].name + " has an odd driver number, it's " + team[i].number + ". " + team[i].firstName + " drives for " + team[i].car + "."); 
 
    } 
 
};

+0

这正是我想要和方式比什么,我想弄清楚,感谢马科斯简单! 我可以问一下,name.split(“”)[0]中的[0]是什么意思,在第一个空白处分割这个?所以如果[0]是[1],它会在第二个空白处分割它(如果有的话)? – GoldenGonaz

+0

是的,'split()'方法将字符串转换为块并存储在一个数组中,所以如果按空格分割,将获得一个数组,其中所有的块都是分开的。然后可以以一个数组的形式访问:'string [0]'第一个元素,'string [1]'第二个元素等。查看更多:https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globales/String/split –

+0

如果这符合您的要求,请立即投票并接受为正确答案。谢谢! –

相关问题