使用空值填充稀疏数组(如压缩两个数组)

时间:2016-05-05 21:18:22

标签: javascript algorithm underscore.js

我有两个数组。第一个只是一些数字的列表,比如magicNumbers = [1,2,3,15,33]。第二个是一个对象数组,都有一个属性magic,如下所示:magicObjects = [ { 'magic': 1 }, {'magic: 2}, {'magic': 15} ]

我需要创建一个新数组,其中包含来自magicObject的对象,其顺序与magic数组中magicNumbers属性的值相同,而{{1}如果magicNumbers中没有相应的对象,则应填充magicObjects。在我们的例子中,这应该给: null

使用[ { 'magic': 1 }, {'magic: 2}, null, {'magic': 15}, null ]_.map()以简单的方式实现它非常容易:

  

_.find()

任何想法如何以javascript方式正确使用underscore.js,或者可能只是更有效?

1 个答案:

答案 0 :(得分:2)

通常可以通过填充地图id: 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);