基于另一个键数组对对象数组进行排序

A.T*_*.T. 4 javascript jquery

我有两个包含对象的数组.一个包含某些顺序的键,另一个包含数据,我需要按照给定的排序键数组对数据数组进行排序.我怎样才能做到这一点?

var a = ['d','a','b','c'] ;
var b =  [{a:1},{c:3},{d:4},{b:2}];
Run Code Online (Sandbox Code Playgroud)

结果应该是:

result = [{d:4},{a:1},{b:2},{c:3]
Run Code Online (Sandbox Code Playgroud)

gur*_*372 7

试试这个

var a = ['d','a','b','c'] ;
var b =  [{a:1},{c:3},{d:4},{b:2}];

b.sort(function(x,y){
  var xkey = a.indexOf(Object.keys(x)[0]);
  var ykey = a.indexOf(Object.keys(y)[0]);
  return xkey - ykey;
})

document.body.innerHTML += JSON.stringify(b,0,4);
Run Code Online (Sandbox Code Playgroud)


Sab*_*san 5

与上述方法不同的方法是使用LodashJavascript 库。

var a = ['d','a','b','c'] ;
var b =  [{a:1},{c:3},{d:4},{b:2}];

var results = _.map(a,function(av) {
   var obj = {};
   obj[av] = _.find(b, av)[av];
   return obj
});

document.body.innerHTML += JSON.stringify(results);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdn.jsdelivr.net/lodash/4.11.1/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)