对一串数字进行排序,每个数字里面都有一个字母.确保在原始数组中保持相同的重复项位置
sorting a string of numbers that each have a letter inside. making sure to keep the same position of duplicates as in the original array
我有一串数字。每个数字里面随机放一个字母。我需要根据每个数字里面的字母按字母顺序对这些数字进行排序。但是,如果有重复,我必须保持原始字符串的顺序。例如:"c21 32b 43a 2c3"必须排序为"43a 32b c21 2c3",然后我需要去掉字母。
到目前为止是这样的:
function cats(s) {
let arr = s.split(' ').sort(function (a,b) {
return a.match(/[a-z]/i)[0].localeCompare(b.match(/[a-z]/i)[0]);
});
console.log(arr)
for (i = 0; i < arr.length; i++) {
arr[i] = arr[i].replace(/'D/g,'');
}
console.log(arr)
}
cats('y381 6a684 9c94 5x346 c9541 31w1 440x16 x620 1b33 y4773 c3019');
我似乎不能把这些重复的字母正确地排序。这很重要,因为稍后我需要对这些数字进行数学运算,而顺序对于得到正确的解很重要。
您可以保留一个分割字符串的数组作为引用,并使用索引来排序,当字母匹配
let refArr = s.split(' ');
let arr = refArr.slice().sort(function (a,b) {
let aLetter = a.match(/[a-z]/i)[0], bLetter=b.match(/[a-z]/i)[0];
if(aLetter === bLetter){
return refArr.indexOf(a) - refArr.indexOf(b);
}else{
return aLetter.localeCompare(bLetter);
}
});
你只需要一个小mod,基本上在排序之前做一个map,存储数组索引,排序然后可以使用索引做一个复合排序,然后我们使用map放回你之前的格式。
function cats(s) {
let arr = s.split(' ').
map(function (v,i) { return {v:v, i:i }}).
sort(function (a,b) {
return a.v.match(/[a-z]/i)[0].localeCompare(b.v.match(/[a-z]/i)[0]) || a.i - b.i}).
map(function (v) { return v.v; });
console.log(arr)
for (i = 0; i < arr.length; i++) {
arr[i] = arr[i].replace(/'D/g,'');
}
console.log(arr)
}
cats('y381 6a684 9c94 5x346 c9541 31w1 440x16 x620 1b33 y4773 c3019');
您可以使用map排序并获得包含已排序项的新数组。这保持了相同字母项的顺序。
var array = 'y381 6a684 9c94 5x346 c9541 31w1 440x16 x620 1b33 y4773 c3019'.split(' ');
var mapped = array.map((el, i) => ({ index: i, letter: el.match(/[a-z]/i)[0] }));
// sorting the mapped array containing the reduced values
mapped.sort((a, b) => a.letter.localeCompare(b.letter) || a.index - b.index);
// container for the resulting order
var result = mapped.map(el => array[el.index]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
相关文章:
- JavaScript 在数组中查找缺少的数字
- 在javascript数组中分散数字
- 将数组键转换为数字node.js
- 删除JS数组中的最小数字
- 创建具有2个唯一数字的Javascript数组
- Javascript按数字顺序排序()数组
- 如何将数字切成更小的数字以适合我的数组
- Javascript中的非数字索引多维数组
- 指定数组中的元素对,其总和等于特定的目标数字
- 从数组/字符串中删除所有小数和单个数字
- 从数组[Javascript]的总长度中减去一个干净的数字
- 如何获取数组中数字的最大出现次数
- 如何将数字相加并将结果放入数组中
- JS:从数组中查找特定范围内的最低/最高数字
- 返回最大数字的数组
- 将数组中的所有数字组合相加
- 在数组中生成随机数,没有任何重复的数字
- 循环遍历数字和字母数组并仅提取数字
- 给定一个带有数字的数组,我如何编写一个递归函数,当 2 个元素加起来为一个目标时,它会在数组中查找索引
- 函数给出输入数字*数组的长度,而不是输入数字*数组的值(javascript)