【问题标题】:How can I sort a JavaScript array by specific criteria?如何按特定条件对 JavaScript 数组进行排序?
【发布时间】:2021-09-11 19:07:02
【问题描述】:

我有一个类似的数组:

[0,0,1,1,0,0,2,2,2,0...]

我必须以这种形式为每个元素传递一个字母:

[A, B, C1, C2, D, E, F1, F2, F3, G...]

当值为零,或者 undefined 或 null 时需要一个新字母,否则需要一个新字母,但相同的数字保持不变。有 2 of 1 然后我需要 C1、C2,然后是 3 of 2 所以我需要 F 3 次。

你能给我一些提示来解决这个问题吗?

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 另外,如果你有[0, 0, 1, 1, 2, 2],会发生什么?你是为2s 开始一个新的字母序列还是继续旧的?
  • 2 需要一个新字母是的。 :)
  • 预期输出是什么?像这样的平面数组:[C1, C2, F1, F1, F2, F2, ...]?
  • 如果在Z之后超出范围怎么办?

标签: javascript arrays reactjs sorting


【解决方案1】:

您可以对 letter 和 count 进行闭包,然后返回与之前相同的字母 count 或仅返回字母。

const
    values = [0, 0, 1, 1, 2, 2, 3, 3, 3, 0],
    result = values.map(((letter, count) => (v, i, { [i - 1]: prev }) => {
        if (v) {
            if (prev && v !== prev) {
                ++letter;
                count = 1;
            }
            return letter.toString(36).toUpperCase() + count++;
        }
        if (count !== 1) ++letter;
        count = 1;
        return (letter++).toString(36).toUpperCase();
    })(10, 1));

console.log(...result);

【讨论】:

  • 当我有一个像 [0, 0, 1, 1, 2, 2, 3, 3, 3, 0] 这样的数组时,我有点坚持你的脚本。我得到结果 [A, B, C1, C2, C3, C4, C5, C6, C7, D] 所以在 1 和 2 以及 2 和 3 处不要更改字母。
  • @DánielBoros,它需要再次检查。请参阅编辑。
  • 看起来不错,但是换字母的时候数字应该从1开始。对不起,我不准确。
  • 我认为我应该在第二个 if 语句中取 count = 1,一切都会完美。
  • 我需要一个这样的数组:[A B C1 C2 D1 D2 E1 E2 E3 F]
猜你喜欢
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 2020-06-03
  • 2020-04-11
相关资源
最近更新 更多