按值对数组元素排序

时间:2019-04-24 07:11:20

标签: javascript jquery node.js

我有一个数组元素,需要对它们进行排序并将所选元素放入数组顶部。

[{
    parent_email: 'dsa@hsah.com',
    id: 143,
    unreadCount: 0 
 },
 {
    parent_email: 'sumanaqqq@ius.com',
    id: 210,
    unreadCount: 0 
 },
 {
    parent_email: 'ffff@gmail.com',
    id: 225,
    unreadCount: 0 
 },
 {
    parent_email: 'fam@gmail.com',
    id: 221,
    unreadCount: 0 
 },
 {
    parent_email: 'fggfdfg@gmail.com',
    id: 224,
    unreadCount: 0 
 }]
我有另一个数组,上面的数组元素需要根据该数组进行排序。第一个元素位于顶部,第二个元素位于第二位置,第三个元素位于第三位置,依此类推。

[{ 
    parent_id: 'fam@gmail.com'
 },
 { 
    parent_id: 'ffff@gmail.com'
 },
 { 
    parent_id: 'sumanaqqq@ius.com'
 }]

我的结果数组应该像

[{
    parent_email: 'fam@gmail.com',
    id: 221,
    unreadCount: 0 
 },
 {
    parent_email: 'ffff@gmail.com',
    id: 225,
    unreadCount: 0 
 },
 {
    parent_email: 'sumanaqqq@ius.com',
    id: 210,
    unreadCount: 0 
 },
 {
    parent_email: 'dsa@hsah.com',
    id: 143,
    unreadCount: 0 
 },
 {
    parent_email: 'fggfdfg@gmail.com',
    id: 224,
    unreadCount: 0 
 }]

我已经尝试过,但是它只能对单个元素进行排序,且不能超过一个。

for (var i = array2.length - 1; i >= 0; i--) {
array1.sort(function(x,y){
    return x.parent_email == rows[i].parent_id ? -1 : y.parent_email ==  rows[i].parent_id ? 1 : 0; 
    });
}

4 个答案:

答案 0 :(得分:2)

您应按第二个数组中的索引对第一个数组进行排序:

 const emailRank = new Map();
 for(const [index, { parent_id }] of array2.entries())
   emailRank.set(parent_id, index);

 array1.sort((a, b) => emailRank.get(b.parent_email) - emailRank.get(a.parentEmail));

答案 1 :(得分:0)

尝试用lodash排序

_.sortBy( parent_email, [function(o) { return o.parent_email; }]);

答案 2 :(得分:0)

对我来说,这似乎不完全像排序(当您按所需顺序抓取匹配项,而不关心其余顺序时),因此您可能会喜欢(尽管,如果出现以下情况,可能会产生意外的输出)复制电子邮件):

const src = [
  {parent_email: 'fam@gmail.com', id: 221, unreadCount: 0},
  {parent_email: 'ffff@gmail.com', id: 225, unreadCount: 0},
  {parent_email: 'sumanaqqq@ius.com', id: 210, unreadCount: 0},
  {parent_email: 'dsa@hsah.com', id: 143, unreadCount: 0},
  {parent_email: 'fggfdfg@gmail.com', id: 224, unreadCount: 0}
];
const order = [
  {parent_id: 'fam@gmail.com'},
  {parent_id: 'ffff@gmail.com'},
  {parent_id: 'sumanaqqq@ius.com'}
];
const res = order
  .map(item => src.find(entry => entry.parent_email == item.parent_id))
  .concat(src.filter(entry => !order.map(item => item.parent_id).includes(entry.parent_email)));

console.log(res);
.as-console-wrapper {
  max-height: 100% !important;
  top: 0;
}

答案 3 :(得分:0)

$imei = $_POST['86207503'];