我试图过滤然后对数字和字符串数组进行排序,但是我的代码无法正常工作

时间:2019-04-05 19:19:17

标签: javascript arrays sorting

我有一个字母和数字数组。

let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]

我想按字母顺序对类型进行排序,然后返回遇到的第一个字母。

我的预期输出应为C

当前,我的代码正确地对所有类型进行了排序,但是如果我尝试将数字过滤掉,它不会返回我需要的内容。任何帮助表示赞赏。

let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]

const sortBothType =(arr)=> {
  return [...arr].sort((a, b) => a.localeCompare(b));
}

const getFirstLetter = (arr) =>{
  let result = ''
  for(let x = 0; x <= arr.length;x++){
    if( parseInt(arr[x]) === 'string'){
      return arr[x]
    }
  }
}

let sortedType = sortBothType(sortLetters)
sortedType
getFirstLetter(sortedType)
let finalResult = getFirstLetter(sortedType)


7 个答案:

答案 0 :(得分:3)

您可以使用Array#findisNaN来获取第一个找到的NaN

const
    sortBothType = ([...array]) => array.sort((a, b) => a.localeCompare(b));
    getFirstLetter = array => array.find(isNaN);

let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1'],
    sortedType = sortBothType(sortLetters);

console.log(getFirstLetter(sortedType));
console.log(sortedType);

答案 1 :(得分:3)

首先过滤掉所有数字,然后进行排序,最后访问第一个数组成员。在示例中,这将为您提供C

sortLetters.filter(x=>/\D/.test(x)).sort()[0]

答案 2 :(得分:0)

由于只需要字母,因此可以使用Array.reduce()来获得“最小”字母。您可以使用isNaN()并选择返回true的项目来忽略数字。

const sortLetters = ['R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]

const result = sortLetters.reduce((r, char) => 
  !isNaN(r) || (isNaN(char) && char < r) ? char : r
)

console.log(result)

答案 3 :(得分:0)

您正在将parseInt()'string'的结果进行比较,请改用isNaN()

此外,如果您先filter取出数字,则不必复制数组,并且可以使用不带参数的sort()。然后使用shift()获取第一个字母:

const letters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ];

console.log(letters.filter(isNaN).sort().shift());

答案 4 :(得分:0)

let sortLetters = ', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1']

console.log(
    sortLetters.map(item => isNaN(parseInt(item)) ? item : null).sort()[0]
);

解释

1在地图fn中,我们检查每个项目是否为数字。当您要检查字符串值内部是否包含数字时,ParseInt方法是合适的。如果不是,则返回isNaN-字符串也是如此。

2三元运算符?:在map函数中帮助我们用检查结果创建新数组,该结果是在1中完成的。

3 Map方法返回的数组仅不包含数字字符,因此我们可以使用sort方法对字母进行排序。

4 [0]-仅从排序的字母列表中返回第一项。

答案 5 :(得分:0)

  • 我们可以通过将数组中的字母转换为NaN来过滤出 个数字。附加+之类的算术运算符会将非数字转换为NaN

  • 然后使用Number.isNaN()对其进行过滤,并对过滤后的字母数组进行排序,其中第一个元素为C

let sortLetters = [ 'R', '1', 'U', '1', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]
const sortBothType =(arr)=> {
  return arr.filter(a => isNaN(+a)).sort((a,b) => a.localeCompare(b));
}
let [firstLetter, ...rest] = sortBothType(sortLetters);
console.log(firstLetter)

答案 6 :(得分:0)

您可以在compareFunction中使用OR运算符将已排序的字母和数字分别分组:

let array = [ 'R', '1', 'U', '1', '2', 'N', '1', 'D', '1', 'M', '1', 'C', '1' ]

let customSort = [...array].sort((a, b) => isNaN(b) - isNaN(a) || a.localeCompare(b))

console.log(customSort)
console.log(customSort[0])