根据条件 lodash 对数组重新排序

jgr*_*gr0 3 javascript functional-programming lodash

我有一个像这样的集合:

var scores = [{
    name: foo,
    score: 34
}, {
    name: bar,
    score: 23
}, {
    name: baz,
    score: 99
}]
Run Code Online (Sandbox Code Playgroud)

我还有一个包含名称的变量:

var selfName = 'bar';
Run Code Online (Sandbox Code Playgroud)

如何重新排列分数集合,使包含 selfName 的对象位于索引 0 处。预期结果:

[{
    name: bar,
    score: 23
}, {
    name: foo,
    score: 34
}, {
    name: baz,
    score: 99
}]
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过以下方式做到这一点:

var isSelfName = (selfName, score) => {
        var _name = selfName; 
        return (score) => {
        return score.name === selfName;    
    }
};
var result = _.filter(scores, isSelfName(selfName));
result.push(_.reject(scores, isSelfName(selfName)));
result = _.flatten(result);
console.log('result:', result);
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

Nin*_*olz 5

您可以将其排序Array#sort并将比较结果作为订单值。

var scores = [{ name: 'foo', score: 34 }, { name: 'bar', score: 23 }, { name: 'baz', score: 99 }],
    selfName = 'bar';

scores.sort(function (a, b) {
    return (a.name !== selfName) - (b.name !== selfName);
});

console.log(scores);
Run Code Online (Sandbox Code Playgroud)