当对象包含值时重新排序对象数组

当在另一个数组中找到值时,我想将项目移动到数组的顶部。

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);

  • 这真的很酷:我完全忘记了您可以对布尔值执行算术运算:)

以上是当对象包含值时重新排序对象数组的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>