用空值填充稀疏数组(如压缩两个数组)
Filling a sparse array with nulls (like zipping two arrays)
我有两个数组。第一个只是一些数字的列表,比如 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);
我有两个数组。第一个只是一些数字的列表,比如 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);