用null填充稀疏数组(类似于压缩两个数组)



我有两个数组。第一个只是一些数字的列表,比如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():以简单的方式实现它非常容易

_.map(magicNumbers, function(num) { return _.find(magicObjects, function(v) { return v.magic == num } ) || null; });

有什么想法可以用javascript的方式,用underscore.js,或者更有效地实现它吗?

通常这是通过填充映射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);

最新更新