繁体   English   中英

对逗号分隔的数字字符串进行排序

[英]Sorting comma-separated strings of number

我有一些可以采用以下格式的数据,

 let items = [
  {
    number: "1"
  },

  {
    number: "5"
  },

  {
    number: "3,1"
  },

  {
    number: "3,11"
  },

  {
    number: "3,3"
  },

  {
    number: "3,2"
  }
]

我希望能够按以下优先级对其进行排序... 1.按“数字”值 1.按“数字”中可能的逗号左侧的第一个“列” 2.按“数字”字段中可能的逗号右侧

因此,我希望看到“1”、“3,1”、“3,2”、“3,3”、“3,11”、“5”

我使用下划线进行排序并提出了以下内容。

items = _.sortBy(items, function(item) {
  let sort = item.number;

  if (item.number.indexOf(",") != -1) {
    const split = item.number.split(",");
    sort = parseInt(split[0]);
  }

  return sort;
});

items = _.sortBy(items, function(item) {
  let sort = item.number;

  if (item.number.indexOf(",") != -1) {
    const split = item.number.split(",");
    sort = parseInt(split[1]);
  }

  return sort;
});

console.log(items);

这给了我“1”、“3,1”、“3,2”、“3,3”、“5”、“3,11”,这很接近但不太正确。 关于如何有效解决这个问题的任何想法? (我知道我可以用下划线链接排序)我不偏爱下划线,也可以使用 vanilla JS

您可以使用localeCompare选项

 let items = [{ number: "1" }, { number: "5" }, { number: "3,1" }, { number: "3,11" }, { number: "3,3" }, { number: "3,2" }]; items.sort(function (a,b) { return a.number.localeCompare(b.number, undefined, { numeric: true, sensitivity: 'base' }); }); console.log(items);

或取拆分值的增量。

 let items = [{ number: "1" }, { number: "5" }, { number: "3,1" }, { number: "3,11" }, { number: "3,3" }, { number: "3,2" }]; items.sort(function (a,b) { var aa = a.number.split(','), bb = b.number.split(','); return aa[0] - bb[0] || (aa[1] || -Infinity) - (bb[1] || -Infinity); }); console.log(items);

编辑:这是数字排序的解决方案,我误读了原始问题并提供了错误的解决方案。

不需要任何图书馆

// first let's remove that object thing, go through items and 
// replace commas with dots also parse them as float
numbers = items.map(item => parseFloat(item.number.replace(',', '.')))

// then just call normal array sort
numbers.sort()

// if you really want back strings with commas instead of 
// dots, replace them back
numbers.map(number => number.toString().replace('.',','))

// outputs
// ["1", "3,1", "3,11", "3,2", "3,3", "5"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM