Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
对象的arraylist的Javascript排序列表-基于specfic arraylist_Javascript_Sorting_Arraylist - Fatal编程技术网

对象的arraylist的Javascript排序列表-基于specfic arraylist

对象的arraylist的Javascript排序列表-基于specfic arraylist,javascript,sorting,arraylist,Javascript,Sorting,Arraylist,如果我有Javascript对象: var myObject = { dataset : [], }; myObject.dataset.push({data : [1,5,4,6]}); myObject.dataset.push({data : [2,4,7,4]}); myObject.dataset.push({data : [12,53,4,45]}); 然后我想对所有的数据集进行排序。数据但是只基于一个特定的数据集。第一个。myObject.dataset[0]。数据集 预期结果

如果我有Javascript对象:

var myObject = {
dataset : [],
};

myObject.dataset.push({data : [1,5,4,6]});
myObject.dataset.push({data : [2,4,7,4]});
myObject.dataset.push({data : [12,53,4,45]});
然后我想对所有的数据集进行排序。数据但是只基于一个特定的数据集。第一个。myObject.dataset[0]。数据集

预期结果:

0 : ({data : [1,4,5,6]}); // sorted list
1 : ({data : [2,7,4,4]}); // others match the changes.
2 : ({data : [12,4,53,45]});
比如:

for(i = 0; i < myObject.dataset.length; i++) {
  myObject.dataset[i].data.sort( BASED ON myObject.dataset[0].data )
}
for(i=0;i

小提琴:这应该可以。我添加了一些评论来说明发生了什么

var something = {
    dataset: [],
};


something.dataset.unshift({data : [1,5,4,6]});
something.dataset.unshift({data : [1,5,8,6]});
something.dataset.unshift({data : [2,4,7,4]});
something.dataset.unshift({data : [12,53,4,45]});
something.dataset.unshift({data : [11,52,41,16]});
something.dataset.unshift({data : [1,53,43,64]});
something.dataset.unshift({data : [1,5,8,6,3]});

//This function is used when sorting two cells in an array
//See the Array.prototype.sort method on MDN for more info
//Returning -1 keeps (a,b)->(a,b), returning 1 swaps (a,b)->(b,a)
var asc = function(a,b) {return a<b?-1:1; };

//Sort the whole dataset, based on the values of each array
something.dataset.sort(function(a,b) {

  //The arguments a and b are cell objects in something.dataset
  //Sort each of the data arrays for the objects
  a.data.sort(asc);
  b.data.sort(asc);

  //Tricky part is if a.data[0] and b.data[0] are equal
  //Find the first cell of both arrays that are not equal
  var i=0; 
  var al = a.data.length;
  var bl = b.data.length
  var l=Math.min(al,bl);
  while(i<l && a.data[i]===b.data[i]) i++;

  //All the values for the shortest of both arrays are equal! Sort by the length of the arrays instead
  if(i>=l) return asc(al,bl);

  //We found a non-equal cell in both arrays, sort by it!
  return asc(a.data[i],b.data[i]);

});

console.log(JSON.stringify(something));
var某物={
数据集:[],
};
unshift({data:[1,5,4,6]});
unshift({data:[1,5,8,6]});
unshift({data:[2,4,7,4]});
unshift({data:[12,53,4,45]});
unshift({data:[11,52,41,16]});
unshift({data:[1,53,43,64]});
unshift({data:[1,5,8,6,3]});
//此函数用于对数组中的两个单元格进行排序
//有关更多信息,请参阅MDN上的Array.prototype.sort方法
//返回-1保留(a,b)->(a,b),返回1个掉期(a,b)->(b,a)

var asc=function(a,b){return a此解决方案将数据重新排列到一个新的数组中,对它们进行排序并将数据移回:

 var regrouped=[];

 for (var i=0; i<myObject.dataset[0].data.length; i++) {
    regrouped.push([]);
 }

     for (var j=0; j<myObject.dataset[0].data.length; j++) {   
    for (i=0; i<myObject.dataset.length; i++) {
       regrouped[j][i]=myObject.dataset[i].data[j];
    }
 }

 regrouped.sort(function(a,b){return a[0]-b[0];});

 for (i=0; i<myObject.dataset.length; i++) {
    for (j=0; j<myObject.dataset[0].data.length; j++) {   
       myObject.dataset[i].data[j]=regrouped[j][i];
    }
 }
var重组=[];

对于(var i=0;i,如果您愿意使用lodash或下划线js库。您可以使用此lodash函数简单优雅地实现您想要的功能

 var something = {
    dataset: [],
};


something.dataset.unshift({data : [1,5,4,6]});
something.dataset.unshift({data : [2,4,7,4]});
something.dataset.unshift({data : [12,53,4,45]});
something.dataset.unshift({data : [11,52,41,16]});
something.dataset.unshift({data : [1,53,43,64]});


_.forEach(something.dataset, function(data){
             console.log(data.data);
           data.data =  _.sortBy(data.data);
 });

console.log(something);

非常感谢,-你介意通过添加注释来解释一些代码吗?fx asc函数我添加了一些注释-我希望它能澄清问题。Javascript中的本机数组排序很奇怪,因此我建议在这里阅读:当然可以,非常感谢为注释/解释我从这把小提琴中注意到的一件事所付出的努力和时间:顺序改变了吗?这可以避免吗?是的,可以。数组排序是一种可变的方法。要保持顺序但执行比较,您可以这样做:var c=a.slice();c.sort(asc);var d=b.slice();d.sort(asc);…然后比较c和d值。我不认为这是问题中所问的问题。就像备选方案一样,先生!