如果元素包含值,则对数组进行排序

时间:2021-03-07 09:00:31

标签: javascript google-apps-script google-sheets

如何正确排序数组,让所有包含“●”的元素都移到数组末尾?

const data = ["ac", "ba●●●", "cd●", "df●●", "ea", "fc●", "ga"];

3 个答案:

答案 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) 从数据中创建一个新数组,其中所有元素都没有 '●'
  • 下一行对所有包含“●”的元素执行相同的操作
  • concat 将两个数组合并成一个新数组
  • 然后过滤器取出所有虚假元素

如果您希望数据按元素中“●”的出现次数排序,则此解决方案可行:

const countOccurrences = x => (x.match(/●/g) || []).length
const compareFunc = (a, b) => countOccurrences(a) - countOccurrences(b)
const sortedData = data.sort(compareFunc)
  • 首先我们需要一个函数来计算“●”的出现次数(使用正则表达式)
  • 然后我们需要一个比较函数来确定我们排序的顺序(升序、降序……)
  • 然后我们需要使用前两个函数对初始数组进行排序

答案 1 :(得分:1)

当你提到 google-sheets 作为标签时,我建议如何使用谷歌表格公式来做到这一点:

enter image description here

首先过滤不包含黑点的元素的范围, 然后过滤包含黑点的元素的范围。 您对两个范围进行排序,然后将一个范围叠加在另一个范围内。

={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);

相关问题