2016-10-13 12 views
1

Ich habe eine Sammlung wie so:Reorder Array basiert auf Bedingung lodash

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

Ich habe auch eine Variable einen Namen enthält:

var selfName = 'bar'; 

Wie kann ich Partituren Sammlung so anordnen, dass das Objekt enthält, selfName ist bei Index 0. Erwartetes Ergebnis:

[{ 
    name: bar, 
    score: 23 
}, { 
    name: foo, 
    score: 34 
}, { 
    name: baz, 
    score: 99 
}] 

ich weiß, dass ich es tun kann:

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

Gibt es einen besseren Weg, es zu tun?

Antwort

2

Sie könnten es mit Array#sort und ein Vergleichsergebnis als Bestellwert sortieren.

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

2

Hervorragende Lösung von Nina zur Verfügung gestellt. Aber da Sie lodash verwenden möchten, gibt es eine andere alternative Lösung, wenn Sie darüber nachdenken möchten.

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>

+0

Und ES6 Ausbreitung Operator hinzufügen, um es kurz und bündig: var result = _.concat (... temp); – jgr0

+0

@ jgr0 danke für das Aufzeigen. Aktualisiert. – WitVault

0

Ein weiterer .sort, das funktioniert. Ich denke, der logische Ausdruck ist etwas intuitiver als der Ausdruck in Ninas Art.

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

 
var selfName = 'bar'; 
 

 
scores.sort(({name:a}, {name:b}) => a === selfName || b === selfName); 
 

 
console.log(scores);

Verwandte Themen