1

私は2つの配列を持っています:

  • values: すべての値を含む配列
  • mainValues: mainValues のリスト。これらの値は配列値に既に存在しますが、並べ替える必要があります。つまり、mainValues は配列値の最初の値である必要があります

この問題を次のように解決しましたが、これがベスト プラクティスであるかどうかはわかりません。

var values = ['bla', 'x', 'y', 'z', 'two', 'one', 'three'];
var mainValues = ['one', 'two', 'three'];

_.forEach(mainValues.reverse(), function(val) {
    var index = _.indexOf(values, val);
    values.splice(index, 1);
    values.unshift(val);
});

console.log(values); // => ["one", "two", "three", "bla", "x", "y", "z"]
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>

4

2 に答える 2

1

これはうまくいくようです:

var values = ['bla', 'x', 'y', 'z', 'two', 'one', 'three'];
var mainValues = ['one', 'two', 'three'];


result = _(mainValues).concat(_.difference(values, mainValues))

document.write(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.0/lodash.min.js"></script>

于 2015-08-01T10:31:05.210 に答える
0

関数でこれを行うことができますArray.prototype.sort()

var values = ['bla', 'x', 'y', 'z', 'two', 'one', 'three'];
var mainValues = ['one', 'two', 'three'];

values.sort(function(obj1, obj2) {
  var idxObj1 = mainValues.reverse().indexOf(obj1);
  var idxObj2 = mainValues.reverse().indexOf(obj2);
  return idxObj2 - idxObj1;
});

console.log(values);

于 2015-08-01T10:45:49.820 に答える