如何按字母顺序排列数组值,并在javascript中创建以相同字符开头的值子数组
我需要帮助按字母顺序对数组排序,然后在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
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);