在javascript中使用另一个对象对对象数组进行排序
我试图通过与另一个对象进行比较来对一组对象进行排序。最后一个数组需要在顶部显示在javascript中使用另一个对象对对象数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我试图通过与另一个对象进行比较来对一组对象进行排序。最后一个数组需要在顶部显示选定的对象,并在其下方显示其余对象 尽管如此,我还是得到了期望的输出。只是想知道我是否可以进一步优化它 let myArray = [ { Name: 'Name 1', id: 1111 }, { Name: 'Name 2', id: 2222 }, { Name: 'Name 3', id: 3333 }, { Name: 'Name 4', id: 4444 }, { N
选定的
对象,并在其下方显示其余对象
尽管如此,我还是得到了期望的输出。只是想知道我是否可以进一步优化它
let myArray = [
{ Name: 'Name 1', id: 1111 },
{ Name: 'Name 2', id: 2222 },
{ Name: 'Name 3', id: 3333 },
{ Name: 'Name 4', id: 4444 },
{ Name: 'Name 5', id: 5555 },
{ Name: 'Name 6', id: 6666 }]
let selected = { 1111: 'some value 1', 4444: 'some value 2' }
sortBySelected = (data) => {
var keys = Object.keys(selected);
return data.filter((obj) => {
if (keys.find((key) => {
return key === String(obj.id);
})) {
return true;
}
return false;
});
}
sortByNotSelected = (data) => {
var keys = Object.keys(selected);
return data.filter((obj) => {
if (keys.find((key) => {
return key === String(obj.id);
})) {
return false;
}
return true;
});
}
sort = (data) => {
data1 = sortBySelected(data);
data2 = sortByNotSelected(data);
return data1.concat(data2);
}
console.log(sort(myArray));
用于排序
myArray.sort(function(a, b) {
var aSelected = selected[a.id] !== undefined;
var bSelected = selected[b.id] !== undefined;
if (aSelected && bSelected === false) {
// a goes before b
return -1;
} else if (aSelected === false && bSelected) {
// a goes after b
return 1;
} else {
// a and b are considered equal...
// let the sort function decide the actual position
return 0;
}
});
您可以在运算符中使用检查的增量
var数组=[{Name:'Name 1',id:1111},{Name:'Name 2',id:2222},{Name:'Name 3',id:3333},{Name:'Name 4',id:4444},{Name:'Name 5',id:5555},{Name:'Name 6',id:6666},
所选={1111:'某些值1',4444:'某些值2'};
array.sort((a,b)=>(所选的b.id)-(所选的a.id));
console.log(数组)代码>
.as控制台包装{max height:100%!important;top:0;}
调用sortBySelected和sortByNotSelected会使javascript在数组上循环两次,使用array.sort更优雅,但成本似乎并不低
我制作了一个stackblitz示例来进行一些测试:
sort函数是最初建议的函数,sort2是循环1次而不是2次的函数,sort3使用Array.sort
结果是一样的,sort2似乎更有效(链接到下面的结果图像):
工作代码:坏代码:所选项目和未选项目是否也需要相互排序?顶部项目的需要顺序是什么?对象的顺序是按值排序的整数。你总是有最聪明的答案