繁体   English   中英

在javascript中用另一个对象排序对象

[英]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;
  }
});

调用sortBySelected和sortByNotSelected使得javascript循环在数组上两次,使用Array.sort更加优雅,但似乎不那么便宜。

我做了一个小的stackblitz示例来做一些测试: https ://stackblitz.com/edit/stackoverflow-48783794

sort函数是最初建议的函数,sort2是一个循环1次而不是2次的函数,sort3使用Array.sort。

结果是一样的,sort2似乎更有效(链接到下面的结果图像):

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM