Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何按字母顺序排列数组值,并在javascript中创建以相同字符开头的值子数组_Javascript_Arrays - Fatal编程技术网

如何按字母顺序排列数组值,并在javascript中创建以相同字符开头的值子数组

如何按字母顺序排列数组值,并在javascript中创建以相同字符开头的值子数组,javascript,arrays,Javascript,Arrays,我需要帮助按字母顺序对数组排序,然后在JavaScript中将它们组合成子数组 例如: var arrayAll = ['1test', '100_test', 'andrew', 'andy', 'bittu', 'ben', 'bigB', 'chandan', 'chan', 'chetan', 'chaitali', ..............] ; 我需要将其转换为以下格式: var arraname = [['100_test','1test'],['andy','andrew

我需要帮助按字母顺序对数组排序,然后在JavaScript中将它们组合成子数组

例如:

var arrayAll = ['1test', '100_test', 'andrew', 'andy', 'bittu', 'ben', 'bigB', 'chandan', 'chan', 'chetan', 'chaitali', ..............] ;
我需要将其转换为以下格式:

 var arraname = [['100_test','1test'],['andy','andrew'],[ 'ben',  'bigB','bittu'],[ 'chan','chandan', chaitali,'chetan'],[...]...];

Javascript逻辑是什么?

您可以首先对数组进行排序,然后使用reduce根据索引0处的字符值对数组进行分组,然后过滤掉空数组

var arrayAll=['1test','100u test','andrew','andy','bittu','ben','bigB','chandan','chan','chetan','chaitali'];
arrayAll.sort();
var结果=阵列减少((r,a)=>{
设pos=a.charCodeAt(0)<'a.charCodeAt(0)| | a.charCodeAt(0)>'z.charCodeAt(0)?0:a.charCodeAt(0)%'a.charCodeAt(0)+1;
r[pos]。推(a);
返回r;
},Array.from({length:27},=>[]);
让arrname=result.filter(x=>x.length);

console.log(arrname)首先您可以创建对象(关联数组), 然后,您可以循环遍历阵列中的所有项目,并将它们添加到对象中。 之后,您可以按对象键对它们进行排序,并最终创建如本文所示的数组:,但只留下obj[key]
请注意,obj[key]应该是已添加元素的数组

您可以根据每个字符串的第一个字符对数组进行排序并构建组

var数组=['1test','100u test','andrew','andy','bittu','ben','bigB','chandan','chan','chetan','chaitali'],
分组=数组
.sort()
.减少(功能(r,a){
如果((r[r.length-1]|【'')[0][0]==a[0]){
r[r.length-1]。推送(a);
}否则{
r、 推动([a]);
}
返回r;
}, []);
控制台日志(分组)
.as console wrapper{max height:100%!important;top:0;}
您可以使用对数组进行排序,然后创建子数组,并通过for循环将它们推入新数组。

尝试以下操作:

这是有效的,更容易理解

我会尝试优化它,我也是JS的新手

函数go(){ var arrayAll=['1test'、'100_test'、'andrew'、'andy'、'bittu'、'ben'、'bigB'、'chandan'、'chan'、'chetan'、'chaitali']; arrayAll.sort(); var arrayName=[]; var-temp=[]; while(阵列长度) { 温度=[]; var startingChar=arrayAll[0].charAt(0); 对于(i=0;i首先对数组排序

var array = ['1test', '100_test', 'andrew', 'andy', 'bittu', 'ben', 'bigB', 'chandan', 'chan', 'chetan', 'chaitali'];
var sortedArray = sorting(array);

function sorting(data) {
    data.sort(function(a, b) {
    var nameA = a.toUpperCase(); // ignore upper and lowercase
    var nameB = b.toUpperCase(); // ignore upper and lowercase
    if (nameA < nameB) {
        return -1;
    }
    if (nameA > nameB) {
        return 1;
    }
    // names must be equal
    return 0;
});
return data;
}

为什么
1test
要在
100\u test
之前,或者
bittu
ben
bigB
之前?也要读。你试过什么了?抱歉,这些可以是任何未按顺序排列的字符串值,每个字符串都封装在另一个数组中。不应该是这种情况。@Xufox抱歉,我没有明白,请解释一下第一个子数组是
[“100_测试”],[“1test”]
,但应该是
[“100_测试”,“1test”]
。谢谢你,伙计,更新了我的答案。现在它工作得很好。谢谢,因为你,我了解了
拼接()
。它对我来说工作正常,但它包含超过27个数组元素,大小写值是分开的。如果我不想在数组元素中使用toLowerCase,有什么建议吗?
 var arrayName = createSection(sortedArray);

function createSection(dataAll) {
//according to name data is stored...
var temp = {}
var profile = [];
dataAll.forEach(function(element) {
    var name = element.toUpperCase();
    var id = name.charAt(0);
    if (!(temp[id] && temp[id].length)) {
        temp[id] = [];
    }
    temp[id].push(element);
});
 for (var k in temp){
   profile.push(temp[k]);
}
console.log(profile);
return profile;
}
console.log(arrayName);