如何在javascript中对数组顺序进行排序?
我不确定这个问题的标题是否正确,也不确定在谷歌上搜索合适的关键词是什么 我有一个数组,看起来像:如何在javascript中对数组顺序进行排序?,javascript,arrays,sorting,Javascript,Arrays,Sorting,我不确定这个问题的标题是否正确,也不确定在谷歌上搜索合适的关键词是什么 我有一个数组,看起来像: var myArray = [1,1,2,2,2,3,4,4,4]; 我想把我的数组分为: var myArray = [1,2,3,4,1,2,4,2,4]; 请注意我的预期结果。顺序为升序,但重复值将在最后一个序列上重复,而不是在相邻的键中组合。因此,预期结果分为1,2,3,41,2,4和2,4 感谢您的帮助,并对我的英语不好表示歉意。我的最佳方法是将数组拆分为单独的数组,以获得每个重复的值
var myArray = [1,1,2,2,2,3,4,4,4];
我想把我的数组分为:
var myArray = [1,2,3,4,1,2,4,2,4];
请注意我的预期结果。顺序为升序,但重复值将在最后一个序列上重复,而不是在相邻的键中组合。因此,预期结果分为1,2,3,4
1,2,4
和2,4
感谢您的帮助,并对我的英语不好表示歉意。我的最佳方法是将数组拆分为单独的数组,以获得每个重复的值,然后将每个单独的数组进行排列并合并。此代码有效。但它可能存在一个更好的解决方案
// We assume myArray is already sorted
var myArray = [1,1,2,2,2,3,4,4,4],
result = [];
while (myArray.length) {
var value = myArray.shift();
// Find place
var index = 0;
while(result[index] && result[index][result[index].length - 1] == value) index++;
if(!result[index]) {
result[index] = [];
}
result[index][result[index].length] = value;
}
result.reduce(function(current, sum) {
return current.concat(sum);
});
console.log(result) // Display [1, 2, 3, 4, 1, 2, 4, 2, 4]
更新:
我编写了一个快速代码示例,如果inputArray中的同一个数字不超过两次,该示例应该可以工作。您可以通过使其递归来改进它,从而为每个新数字创建新数组并消除限制。我有一些空闲时间,所以我重新编写了一个递归函数,按照您想要的顺序组对任何给定数组进行排序。就像一个符咒,输入阵列
不需要排序,也不需要任何库
var-inputArray=[3,4,1,2,3,1,2,4,1,2,5,1];
var结果=排序序列(输入阵列);
控制台日志(结果)//输出:[1,2,3,4,5,1,2,3,4,1,2,1]
函数排序顺序(inputArray){
var inputArraySize=inputArray.length,
tempArray=[],//保存我们正在填充的新数组
sameValuesArray=[],//持有我们将在递归调用中作为param传递的相同值
rSorted=[];//如果没有相同的值,则初始化排序数组
对于(变量i=inputArraySize;i>0;i--){
var value=inputArray.pop();
tempArray.push(值);
变量计数器=0,
tempArraySize=tempArray.length;
对于(var j=0;j0){
rSorted=排序序列(sameValuesArray);
}
tempArray.sort();
返回tempArray.concat(rSorted);
}
这是我使用JQuery的方法,它不假设数组已经排序
它将在数组中进行迭代,并且不向tempResultArray重复,一旦完成,它将把它们添加到现有结果中,并再次重复该过程以查找重复项
这不是最有效的方法,但它可以由一个函数处理,并且不需要对数组进行排序
var myArray = [1,1,2,2,2,3,4,4,4],result = [];
while (myArray && myArray.length) {
myArray = customSort(myArray);
}
console.log(result);
function customSort(myArray){
var tempResultArray = [], tempMyArray = [];
$.each(myArray, function(i, el){
if($.inArray(el, tempResultArray ) === -1){
tempResultArray.push(el);
}else{
tempMyArray.push(el);
}
});
tempResultArray.sort(function(a, b){return a-b});
$.merge( result,tempResultArray)
return tempMyArray;
}
该提案采用了一种直截了当的方法,重点是数组方法
函数萌芽(数组){
返回数组.reduce(函数(r,a){
!r.some(函数(b){
if(b[b.长度-1]document.write(“”+JSON.stringify(sprout([1,1,2,3,3,4,5,5,6,6,6,7]),0,4)+’代码>这里是另一个解决方案:
var myArray=[1,1,2,2,2,3,4,4,4];
函数mySequelArray(arr){
var res=参数[1]| |[];
var nextVal;
var min=Math.min.apply(null,arr);
如果(分辨率长度>0){
nextVal=arr.filter(函数(x){
返回x>res[res.length-1]
}).sort()[0]| | min;
}否则{
nextVal=min;
}
res.push(nextVal);
arr.拼接(arr.indexOf(nextVal),1);
返回(arr.length>0)?mySequelArray(arr,res):res;
}
console.log(mySequelArray(myArray))
如果您有[1,2,3,7,7,7]?@NinaScholz,您期望的结果应该是[1,2,3,7,7,7,7]
var myArray = [1,1,2,2,2,3,4,4,4],result = [];
while (myArray && myArray.length) {
myArray = customSort(myArray);
}
console.log(result);
function customSort(myArray){
var tempResultArray = [], tempMyArray = [];
$.each(myArray, function(i, el){
if($.inArray(el, tempResultArray ) === -1){
tempResultArray.push(el);
}else{
tempMyArray.push(el);
}
});
tempResultArray.sort(function(a, b){return a-b});
$.merge( result,tempResultArray)
return tempMyArray;
}