假设我有两个数组,即 namesArray 和名称,如下所示
var namesArray = [{"name":"Charlie","age":3},{"name":"Dog","age":1},{"name":"Baker","age":7},{"name":"Abel","age":9}];
var names = ['Baker', 'Dog', 'Abel', 'Charlie'];
我是否可以在 UnderscoreJS 中实现以下功能,以便按顺序对名为 namesArray 的数组进行排序,以便 namesArray 的所有名称元素将与名称的顺序相同。
答案 0 :(得分:2)
在普通的Javascript中,您可以将Array#sort
与对象一起用作排序顺序的参考。
var namesArray = [{ "name": "Charlie", "age": 3 }, { "name": "Dog", "age": 1 }, { "name": "Baker", "age": 7 }, { "name": "Abel", "age": 9 }],
names = ['Baker', 'Dog', 'Abel', 'Charlie'],
hash = Object.create(null);
names.forEach(function (a, i) {
hash[a] = i + 1;
});
namesArray.sort(function (a, b) {
return (hash[a.name] || 0) - (hash[b.name] || 0);
});
console.log(namesArray);
答案 1 :(得分:2)
在sort()
中查找每个名称的索引。不像创建索引的哈希那样高效,但是它也不是那么重要
namesArray.sort(function(a,b){
return names.indexOf(a.name) - names.indexOf(b.name);
});
答案 2 :(得分:0)
与次要内容没什么关系,但你可以这样做: 我认为在性能方面使用像what Nina does这样的哈希比indexOf更好。
var namesArray = [{ "name": "Charlie", "age": 3 }, { "name": "Dog", "age": 1 }, { "name": "Baker", "age": 7 }, { "name": "Abel", "age": 9 }];
var names = ['Baker', 'Dog', 'Abel', 'Charlie'];
var sorted = _.sortBy(namesArray, o => names.indexOf(o.name));
console.log(sorted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>