如何正确排序数组,让所有包含“●”的元素都移到数组末尾?
const data = ["ac", "ba●●●", "cd●", "df●●", "ea", "fc●", "ga"];
答案 0 :(得分:2)
如果您不需要任何特定的排序,这将完成这项工作:
const sortedData = []
.concat(
data.map(e => !e.includes('●') && e),
data.map(e => e.includes('●') && e)
)
.filter(e => e)
它的作用:
data.map(e => !e.includes('●') && e)
从数据中创建一个新数组,其中所有元素都没有 '●'如果您希望数据按元素中“●”的出现次数排序,则此解决方案可行:
const countOccurrences = x => (x.match(/●/g) || []).length
const compareFunc = (a, b) => countOccurrences(a) - countOccurrences(b)
const sortedData = data.sort(compareFunc)
答案 1 :(得分:1)
当你提到 google-sheets 作为标签时,我建议如何使用谷歌表格公式来做到这一点:
首先过滤不包含黑点的元素的范围, 然后过滤包含黑点的元素的范围。 您对两个范围进行排序,然后将一个范围叠加在另一个范围内。
={sort(filter(I4:I10,regexmatch(I4:I10,"●")=false));
sort(filter(I4:I10,regexmatch(I4:I10,"●")))}
答案 2 :(得分:0)
在不更改对象引用的情况下,您可以通过获取检查字符串中不需要的字符串的布尔值的增量来对数组进行排序。
const data = ["ac", "ba●●●", "cd●", "df●●", "ea", "fc●", "ga"];
data.sort((a, b) => a.includes('●') - b.includes('●'));
console.log(data);