当对象包含值时重新排序对象数组
当在另一个数组中找到值时,我想将项目移动到数组的顶部。
const data = [
{ value: 'BMW', count: 1 },
{ value: 'AUDI', count: 1 },
{ value: 'VAUXHALL', count: 1 },
{ value: 'FIAT', count: 1 },
{ value: 'HONDA', count: 1 },
{ value: 'LANDROVER', count: 1 },
];
const selected = [ 'AUDI', 'HONDA' ];
所以基本上上面会变成:
const data = [
{ value: 'AUDI', count: 1 },
{ value: 'HONDA', count: 1 },
{ value: 'BMW', count: 1 },
{ value: 'VAUXHALL', count: 1 },
{ value: 'FIAT', count: 1 },
{ value: 'LANDROVER', count: 1 },
];
这就是我目前所拥有的,但是它没有按预期工作,而且一点也不好:
let prepend = [];
selected.forEach(selected => {
for (let i = 0; i < data.length; i++) {
if (data[i] && data[i].value === selected) {
prepend.push(data[i]);
delete data[i];
break;
}
}
})
data.unshift(...prepend);
data = data.filter(Boolean);
我想做一些像这样更清洁的事情:
return [...data].sort((a, b) => {
});
回答
您可以使用Array#includes和来利用布尔算术运算Array#sort。
const data = [
{ value: 'BMW', count: 1 },
{ value: 'AUDI', count: 1 },
{ value: 'VAUXHALL', count: 1 },
{ value: 'FIAT', count: 1 },
{ value: 'HONDA', count: 1 },
{ value: 'LANDROVER', count: 1 },
];
const selected = [ 'AUDI', 'HONDA' ];
data.sort((a, b) => selected.includes(b.value) - selected.includes(a.value))
console.log(data);
- 这真的很酷:我完全忘记了您可以对布尔值执行算术运算:)