我有两个阵列。第一个只是一些数字的列表,比如说,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);