我有这个字符串:

let sx = ";1,2,3,4;5;10,11;"

字符串有单独的部分,用";"分隔,然后用","分隔,因此这些部分如下所示:

1、2、3、4、5和10,11

在数字上,部件将始终按升序排列,但不一定是连续的.

然后,网站的用户创建另一个"部分",它可能是"6,7,8,9",总是连续的,总是不同于"sx"的任何部分,但随机(它可能是"28,29,30"或"15").我把这个部分命名为"S1".现在的目标是将"sample"与"s1"连接起来,并根据每个部分的第一个数字对其进行排序.以下是我try 过的:

let sx = ";1,2,3,4;5;10,11;";
let s1 = "6,7,8,9";

//join "sx" with "s1", and split the new string by ";":
s1 = sx.concat(";" + s1 + ";");
s1 = s1.split(";").filter(Boolean);

//sort s1 by the first number of each part:
s1.sort(function(a, b) {
    var ax = a[0], bx = b[0];
    return parseInt(ax) - parseInt(bx);
});

console.log(s1);

尽管我使用了"parseInt",但上面示例中的结果返回:"1,2,3,4,10,11,5,6,7,8,9".

我需要的是:"1,2,3,4,5,6,7,8,9,10,11",各个部分是:

"1,2,3,4"和"5"以及"6,7,8,9"和"10,11",这样我就可以正确地更新原始字符串"sx".

我做错了什么?顺便说一下,我不完全确定最终结果是字符串还是数组(?),所以请原谅这个问题的标题!

推荐答案

您正在try 获取每个部件的第一个编号.a[0]b[0]不是部件的第一个数字,而是字符串的第一个字符,这是因为ab是字符串,而不是array.

let sx = ";1,2,3,4;5;10,11;";
let s1 = "6,7,8,9";

//join "sx" with "s1", and split the new string by ";":
s1 = sx.concat(";" + s1 + ";");
s1 = s1.split(";").filter(Boolean);

//sort s1 by the first number of each part:
s1.sort(function(a, b) {
  var ax = a.split(",")[0];
  var bx = b.split(",")[0];
  return parseInt(ax) - parseInt(bx);
});

//flatten the array into a single string with all the numbers separated by commas:
sx = s1.join(",");
console.log(sx);

Javascript相关问答推荐

一次仅播放一个音频

使用json文件字符串来enum显示类型字符串无法按照计算的enum成员值的要求分配给类型号

在页面上滚动 timeshift 动垂直滚动条

如何粗体匹配的字母时输入搜索框使用javascript?

你怎么看啦啦队的回应?

我创建了一个创建对象的函数,我希望从该函数创建的对象具有唯一的键.我怎么能做到这一点?

如何在coCos2d-x中更正此错误

如何迭代叔父元素的子HTML元素

如何修复我的数据表,以使stateSave正常工作?

rxjs插入延迟数据

如何使用JavaScript拆分带空格的单词

使用插件构建包含chart.js提供程序的Angular 库?

使用Ace编辑器对子组件实例的native-element 进行Angular 获取时面临的问题

用于部分字符串的JavaScript数组搜索

使用可配置项目创建网格

通过解构/功能组件接收props-prop验证中缺少错误"

Chrome上的印度时区名S有问题吗?

如何在加载页面时使锚定标记成为焦点

递归地将JSON对象的内容上移一级

此上下文在JavaScript中