【问题标题】:Sorting based on the string : Angular基于字符串排序:Angular
【发布时间】:2023-03-25 06:23:01
【问题描述】:

我已经创建了一个列表

let keywords = ['do', 'if', 'in', 'for', 'new', 'try', 'for','var'];

现在我可以根据字符串进行过滤,也可以按降序和升序进行排序。

但我无法根据字符串进行排序,

EX:- 我需要使用 'for' 对列表进行排序(for 需要位于列表顶部,其余部分将保持原样)。

【问题讨论】:

  • 您的排序标准到底是什么?也许您希望对过滤后的结果进行排序。但从你的问题来看,这并不是很清楚。
  • 所以你期待像 ['for,'for','do', 'if', 'in', 'new', 'try','var']; ??
  • 是的,完全一样

标签: javascript angular typescript ecmascript-6


【解决方案1】:

基本上你只需要改变排序函数的回调:

let keywords = ['do', 'if', 'in', 'for', 'new', 'try', 'for','var'];

const sortWithWord = (words, firstWord) => words.sort((a, b) => {
    if (a === firstWord) return -1;
    return a.localeCompare(b);
});

//will print  ["new", "do", "for", "for", "if", "in", "try", "var"]
console.log(sortWithWord(keywords, "new"));

排序的条件当然可以不一样,但是如果你想让某个词排在第一位,你就得在比较的时候返回一个负值。

【讨论】:

    【解决方案2】:

    据我了解,您想对排序列表进行切片,如下所示:

    keywords.sort();
    var result = keywords.slice(keywords.findIndex(function(item){ return item == "for"; }));
    

    【讨论】:

      【解决方案3】:
      let keywords = ['do', 'if', 'in', 'for', 'new', 'try', 'for','var'];
      let spliceArray = keywords; //For this line there is for sure a more elegant solution.
      
      const queryIndex = keywords.findIndex(entry => entry === 'for');
      
      spliceArray.splice(queryIndex, 1);
      
      const newKeywords = [keywords[queryIndex], ...spliceArray];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-28
        相关资源
        最近更新 更多