[英]Sort array of objects with another in javascript
我试图通过将对象与另一个对象进行比较来对对象数组进行排序。 最终的数组需要在顶部显示selected
对象并在其下方显示。
虽然,我得到了理想的输出。 只是想知道我是否可以进一步优化它。
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));
您可以in
运算符中使用检查的增量。
var array = [{ 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 }], selected = { 1111: 'some value 1', 4444: 'some value 2' }; array.sort((a, b) => (b.id in selected) - (a.id in selected)); console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
使用Array.sort
进行排序。
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;
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.