【问题标题】:Javascript sorting string [closed]Javascript排序字符串[关闭]
【发布时间】:2019-06-25 05:59:30
【问题描述】:

我有数组['A', 'B', 'A', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'A'] 我想分类到['A', 'A', 'B', 'B', 'A', 'A', 'B', 'B', 'A', 'A', 'B', 'A', 'A']。 如何使用javascript解决它?

【问题讨论】:

  • 你这样排序的逻辑到底是什么?例如,您打算如何区分这个'A' 和那个'A'
  • 在此处提问之前,您必须至少展示您尝试解决问题的一些努力。没有人会为你做这件事。
  • @jonrsharpe 我认为它们的不同之处在于索引
  • 认为是什么意思?如果你不能清楚地向我们表达你的排序要求,那么用 JS 编写它们或多或少是不可能的。
  • @IsaacVidrine 我试过了,但它仍然是一个错误,我认为它变得不必要了。对不起,如果我犯了错误

标签: javascript arrays sorting


【解决方案1】:

我认为,这不是sorting,而是一代完成您的输出的新数组,在这种情况下,您可以这样做:

1) 首先过滤不同数组上的所有A 和所有B

2) 然后创建一个新数组,在其中逐步放置每个先前过滤数组的两个元素(或可用数量)。

const input = ['A', 'B', 'A', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'A'];

let arrA = input.filter(x => x === 'A');
let arrB = input.filter(x => x === 'B');
let res = [];

for (let i = 0; i < Math.max(arrA.length, arrB.length); i += 2)
{
    res.push(...arrA.slice(i, i + 2), ...arrB.slice(i, i + 2));
}

console.log(JSON.stringify(res));

如果您需要更通用的方法,您可以使用下一个,或采用 Nina Scholz

的答案

const input = ['D', 'A', 'B', 'C', 'A', 'A', 'B', 'A', 'B', 'D', 'A', 'B', 'A', 'B', 'A', 'A', 'C', 'D', 'D', 'D'];

let groups = input.sort().reduce(
    (acc, curr) => {
        acc[curr] = [...(acc[curr] || []), curr];
        return acc;
    },
    {}
);

let maxLength = Math.max(...Object.values(groups).map(group => group.length));

let res = [];

for (let i = 0; i < maxLength; i += 2)
{
    Object.values(groups).forEach(
        group => res.push(...group.slice(i, i + 2))
    );
}

console.log(res);

【讨论】:

    【解决方案2】:

    您可以使用 map 进行排序,并为每个值使用一个组,对于每两个相同的值,该组具有相同的值。

    var array = ['A', 'B', 'A', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'B', 'A', 'A'],
        groups = Object.create(null),
        result = array
            .map((value, index) => ({
                value,
                index,
                group: (value in groups ? ++groups[value] : (groups[value] = 0)) >> 1
            }))
            .sort((a, b) => a.group - b.group || a.value.localeCompare(b.value) || a.index - b.index)
            .map(o => array[o.index]);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

    • 哇.. 非常感谢
    • 哇,你努力制作一个通用版本,好一个! +1
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2020-01-29
    • 1970-01-01
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多