如何在另一个数组上依赖于数组

时间:2015-08-01 10:01:52

标签: javascript arrays lodash array-splice

我有两个数组:

  • 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>

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您可以使用Array.prototype.sort()功能执行此操作。

&#13;
&#13;
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);
&#13;
&#13;
&#13;