我有两个阵列。第一个只是一些数字的列表,比如说,magicNumbers = [1,2,3,15,33]第二个是一个对象数组,所有对象都有一个属性magic,比如:magicObjects = [ { 'magic': 1 }, {'magic: 2}, {'magic': 15} ]
我需要创建一个新数组,其中包含magicObject中的对象,其顺序与magic数组中的magicNumbers属性值的顺序相同,并且magicNumbers中没有相应对象的位置应填充magicObjects。在我们的例子中,这应该给出:
null
[ { 'magic': 1 }, {'magic: 2}, null, {'magic': 15}, null ]_.map()很容易实现它:
_.find()
有什么想法可以用javascript的方式,用underline.js,或者更有效的方式来实现吗?

最佳答案

通常这是通过填充mapid: object并在运行时从映射中获取对象来完成的所以你得到的是N+M性能而不是N*M

console.info=function(x){document.write('<pre>'+JSON.stringify(x,0,3)+'</pre>')}
//--

magicNumbers = [1,2,3,15,33];
magicObjects = [ { 'magic': 1 }, {'magic': 2}, {'magic': 15} ];

var mapping = {};
magicObjects.forEach(o => mapping[o.magic] = o);

var result = magicNumbers.map(n => mapping[n] || null);

console.info(result);

07-28 11:02