Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript在第一个空格上拆分字符串_Javascript_Sorting_Space - Fatal编程技术网

Javascript在第一个空格上拆分字符串

Javascript在第一个空格上拆分字符串,javascript,sorting,space,Javascript,Sorting,Space,我有以下代码作为表排序脚本的一部分。现在,它允许“FIRST-LAST”格式的姓名通过“重新格式化”到“LAST,FIRST”按姓氏排序 目前它似乎在最后一个空格后按名称排序(前让·克劳德·范达姆按“D”排序) 我怎样才能将这个脚本更改为在第一个空间排序(这样Van Damme就会出现在V中) 提前谢谢 您可以使用以下方法将该功能缩短一点: 要将名字放在所有其他名称后面,可以使用 function FullNamePrepareData(td, innerText) { var name

我有以下代码作为表排序脚本的一部分。现在,它允许“FIRST-LAST”格式的姓名通过“重新格式化”到“LAST,FIRST”按姓氏排序

目前它似乎在最后一个空格后按名称排序(前让·克劳德·范达姆按“D”排序)

我怎样才能将这个脚本更改为在第一个空间排序(这样Van Damme就会出现在V中)


提前谢谢

您可以使用以下方法将该功能缩短一点:

要将名字放在所有其他名称后面,可以使用

function FullNamePrepareData(td, innerText) {
    var names = innerText.split(' '),
        first = names.shift();
    return names.join(' ')+', '+first;
}
或使用:


您可以使用以下方法将该函数缩短一点:

要将名字放在所有其他名称后面,可以使用

function FullNamePrepareData(td, innerText) {
    var names = innerText.split(' '),
        first = names.shift();
    return names.join(' ')+', '+first;
}
或使用:


我不知道分拣在哪里进行;听起来您只是想更改重新排序的输出

最简单的方法是使用regexp:

// a part without spaces, a space, and the rest
var regexp = /^([^ ]+) (.*)$/;

// swap and insert a comma
"Jean-Claude Van Damme".replace(regexp, "$2, $1"); // "Van Damme, Jean-Claude"

我不知道分拣在哪里进行;听起来您只是想更改重新排序的输出

最简单的方法是使用regexp:

// a part without spaces, a space, and the rest
var regexp = /^([^ ]+) (.*)$/;

// swap and insert a comma
"Jean-Claude Van Damme".replace(regexp, "$2, $1"); // "Van Damme, Jean-Claude"

代替
.split()
和循环,您可以执行替换:

return innerText.replace(/^([^\s]+)\s(.+)$/,"$2, $1");

也就是说,使用
([^\s]+)
查找第一个空格之前的所有字符,并将其与第一个空格
(.+)
之后的字符交换,同时插入逗号。

而不是
.split()
,并且可以执行替换的循环:

return innerText.replace(/^([^\s]+)\s(.+)$/,"$2, $1");

也就是说,使用
([^\s]+)
查找第一个空格之前的所有字符,并将其与第一个空格
(.+)
之后的字符交换,同时插入一个逗号。

我想您要的是:

    var words = innerText.split(' '),
        firstName = words.shift(),
        lastName = words.join(' ');
    return lastName + ', ' + firstName;        

这会给你“范·达姆,让·克劳德”

我想你在追求这个:

    var words = innerText.split(' '),
        firstName = words.shift(),
        lastName = words.join(' ');
    return lastName + ', ' + firstName;        

这会给你“Van Damme,Jean-Claude”

你的函数似乎返回了正确的结果。但是,如果排序不正确,您需要向我们展示排序函数以及如何在其中应用
PrepareData
。变量
a
的作用是什么?如果名字中有空格怎么办?我知道有人的名字是“安妮·玛丽”(没有连字符)。@nnnnnnnn到目前为止,我们数据库中的所有记录要么只有一个名字,要么名字连字符为“安妮·玛丽”,所以这不是问题(现在)。如果我们有“安妮·玛丽·范·达姆”、“安妮·玛丽·史密斯”和“安妮·范·达姆”这样的唱片,我真的不知道我们会如何攻击它。幸运的是,我们还没有遇到这个问题。您的函数似乎返回了正确的结果。但是,如果排序不正确,您需要向我们展示排序函数以及如何在其中应用
PrepareData
。变量
a
的作用是什么?如果名字中有空格怎么办?我知道有人的名字是“安妮·玛丽”(没有连字符)。@nnnnnnnn到目前为止,我们数据库中的所有记录要么只有一个名字,要么名字连字符为“安妮·玛丽”,所以这不是问题(现在)。如果我们有“安妮·玛丽·范·达姆”、“安妮·玛丽·史密斯”和“安妮·范·达姆”这样的唱片,我真的不知道我们会如何攻击它。幸运的是,我们还没有遇到这个问题。+1,但是您可以使用非空白
\S
而不是非空白
[^\S]
这似乎做得很好。这两个“非空白”示例之间的区别是什么?+1,但是您可以使用非空白
\S
而不是非空白
[^\S]
这似乎做得很好。这两个“非空白”示例之间有什么区别?