我现在一直试图解决这个问题,但我无法解决这个问题。 此函数接收一个名称数组,并应返回包含中间名称的数组。如果某人没有中间名,则该数组应在此索引处包含值null。
我知道我的代码并不完整,但是不能使其工作的一半。无论我做什么,拼接方法都不起作用,现在我很失落。
到目前为止,这是我的代码:
function getMiddleNames (names) {
let solution =[];
let separated = [];
for(let i=0; i<names.length; i++){
separated.push(names[i].split(' '));
}
return separated.splice(1);
}
测试:
describe('getMiddleNames', function () {
it('returns [] when passed []', function () {
expect(getMiddleNames([])).to.eql([]);
});
it('returns ["Hannah"] when passed ["Caroline Hannah Jamieson"]', function () {
expect(getMiddleNames(['Caroline Hannah Jamieson'])).to.eql(['Hannah']);
});
it('returns ["Reuben", "Keith", "Clara"] when passed ["Steven Reuben Williams", "Carl Keith Morelli", "Sissel Clara Blomqvist"]', function () {
expect(getMiddleNames(['Steven Reuben Williams', 'Carl Keith Morelli', 'Sissel Clara Blomqvist'])).to.eql(['Reuben', 'Keith', 'Clara']);
});
it('returns ["Reuben", null, "Clara"] when passed ["Steven Reuben Williams", "Carl Morelli", "Sissel Clara Blomqvist"]', function () {
expect(getMiddleNames(['Steven Reuben Williams', 'Carl Morelli', 'Sissel Clara Blomqvist'])).to.eql(['Reuben', null, 'Clara']);
});
it('returns ["Reuben", null, null] when passed ["Steven Reuben Williams", "Carl Morelli", "Sissel"]', function () {
expect(getMiddleNames(['Steven Reuben Williams', 'Carl Morelli', 'Sissel'])).to.eql(['Reuben', null, null]);
});
});
有人能帮我一把吗?谢谢
答案 0 :(得分:3)
将整个名称推入分离的数组,然后将其拼接。哪个不起作用。您需要将名称分开并单独拆分:
function getMiddleNames (names) {
let solution =[];
for(let i=0; i<names.length; i++){
let separated = names[i].split(' ')
solution.push(separated.length == 3 ? separated[1] : null);
}
return solution
}
let names = ['Steven Reuben Williams', 'Carl Morelli', 'Sissel Clara Blomqvist']
console.log(getMiddleNames(names))
&#13;
这当然假设总会有一个中间名。如果没有它,它将失败并提供姓氏。
您可以使用map
更简洁,并同时测试名称长度。仍然会有边缘案例(有四个名字的人等):
let names = ['Steven Reuben Williams', 'Carl Keith Morelli', 'Sissel Clara Blomqvist']
let middles= names.map(n => {
s = n.split(' ')
// s should be an array [first, middle, last]
// if no middle name it will be [first, last] and length 2
return s.length == 3 ? s[1] : null
})
console.log(middles)
&#13;
答案 1 :(得分:-1)
试试这个:
<div class="Bg5">Text with rainbow colors</div>