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)
有更好的方法吗?
您可以将其排序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)