如何转换数量不确定的输入字符串?

时间:2019-04-10 23:36:44

标签: javascript

我正在编写一些代码来转换一些输入名称(例如:John Doe-> J. Doe),却不知道输入名称的长度(可以是John Williams Roger Fred Doe,即J. W. R. F. Doe)。

我想出了输入2个名字的算法,但是我找不到找到覆盖其余情况的有效方法。我想到的唯一方法是在某些if语句中将其余的案例最多包含10个名称。还有其他有效的方法吗?预先感谢!

function convertName(name) {
    var [a, b] = name.split(" ");
    var c = `${a[0]}${". "}${b}`;
    return c;
    }

3 个答案:

答案 0 :(得分:1)

我认为您想要这样的东西:

function convertName(name) {
    const nameArray = name.split(" ")

    return nameArray
        .map((name, index) => index !== nameArray.length - 1 ? `${name[0]}.` : name)
        .join(' ')
}

这是怎么回事?

  • .map()迭代一个数组并返回一个新数组,它可能需要1或2个args,项和索引(按此顺序)Array.map()

  • index !== nameArray.length - 1,请确保它不是索引中的最后一项,因为您需要全部

  • ? ${name[0]}.(如果不是最后一项),则截短

  • : name(如果是),将其完整保留
  • .join(' ')将数组.map()返回,返回为单个字符串

此函数并不关心名称中有多少部分,它还处理单个部分名称,即:"John Snow The One" => "J. S. T. One""John" => "John"

答案 1 :(得分:0)

您可以使用pop()删除姓氏。然后map()将其余部分转换为缩写。最后将所有内容放在一起:

function convertName(name) {
    var names = name.trim().split(" ");
    let last = names.pop()
    return [...names.map(s => s[0]), last].join(". ")
}
console.log(convertName("John Williams Roger Fred Doe"))
console.log(convertName("John Doe"))
console.log(convertName(" Doe"))

您可能要检查诸如单个名称之类的边缘情况。

答案 2 :(得分:0)

您可以使类似这样的内容,易于理解。

function convertName(name) {

    var arrayNames = name.split(" ");  // Create an array with all the names

    // loop on all the name except the last one
    for (var i = 0; i < arrayNames.length - 1; i++) { 

        arrayNames[i] = arrayNames[i].charAt(0).concat(".") // Keeping the first letter and add the dot
    }

    return arrayNames.join(" "); // join all the array with a ' ' separator
}

console.log(convertName("John Williams Roger Fred Doe"))
console.log(convertName("John Doe"))