我有两个数组。第一个只是一些数字的列表,比如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,或者可能只是更有效?
答案 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);