I have a collection like so:
var scores = [{
name: foo,
score: 34
}, {
name: bar,
score: 23
}, {
name: baz,
score: 99
}]
I also have a variable containing a name:
var selfName = 'bar';
How can I rearrange scores collection such that the object containing selfName is at index 0. Expected result :
[{
name: bar,
score: 23
}, {
name: foo,
score: 34
}, {
name: baz,
score: 99
}]
I know I can do it by:
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);
Is there a better way of doing it?
You could sort it with Array#sort and a comparison result as order value.
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);
Excellent solution provided by Nina. But since you want to use lodash there is another alternative solution if you like to consider.
var scores = [{ name: 'foo', score: 34 }, { name: 'bar', score: 23 }, { name: 'baz', score: 99 }],
selfName = 'bar';
var temp = _.partition(scores, function(score) { return score.name === selfName; });
var result = _.concat(...temp);
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.16.4/lodash.min.js"></script>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With