如何排序一个数组取决于另一个数组
How to order an array dependend on another array
我有两个数组:
- values:包含所有值的数组
- mainValues:包含mainValues的列表,这些值已经存在于数组值中,但必须排序。例如,mainValues应该是数组values 中的第一个值
我这样解决了这个问题,但我不确定这是否是最佳实践:
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>
这似乎工作得很好:
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>
您可以使用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);
相关文章:
- 按不同项目对对象数组进行排序
- 根据Javascript中的字符串值对数组的数组进行排序
- 对对象数组中的数组进行排序
- 按特定键对对象数组进行排序
- 尝试对对象数组进行排序但拼接不是一个函数
- 对javascript中某些键的对象数组进行排序
- 在jquery中对时间数组进行排序
- 如何在具有相同 ID 的 Javascript 中按排序函数对关联数组进行排序
- 在Javascript中对具有特定异常的对象数组进行排序
- 数组数据排序类似mysql查询
- 按 [field] 值对 javascript 数组进行排序会给出错误的顺序
- 使用函数“sort”对javascript数组进行排序
- 按子属性(可能缺少)对对象的 javascript 数组进行排序
- 以不同的方式对相同的可观察数组进行排序
- 按多个属性对多维数组进行排序
- 空数组和排序推送键 JavaScript
- 如何使用不可变表示此数组重新排序示例
- Lodash 在 JavaScript 中对对象数组进行排序
- 如何按一个仍保持字母顺序的特性值(另一个特性值)对关联数组进行排序
- 如何使用第二个数组中对象的相关属性对对象数组进行排序