返回一个元素在特定位置的数组

时间:2018-03-31 21:41:25

标签: javascript arrays methods

我现在一直试图解决这个问题,但我无法解决这个问题。 此函数接收一个名称数组,并应返回包含中间名称的数组。如果某人没有中间名,则该数组应在此索引处包含值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]);
  });
});

有人能帮我一把吗?谢谢

2 个答案:

答案 0 :(得分:3)

将整个名称推入分离的数组,然后将其拼接。哪个不起作用。您需要将名称分开并单独拆分:

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

这当然假设总会有一个中间名。如果没有它,它将失败并提供姓氏。

您可以使用map更简洁,并同时测试名称长度。仍然会有边缘案例(有四个名字的人等):

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

答案 1 :(得分:-1)

试试这个:

<div class="Bg5">Text with rainbow colors</div>