我有一个数组元素,需要对它们进行排序并将所选元素放入数组顶部。
[{
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;
});
}
答案 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'];