2016-05-05 1 views
0

私は2つの配列を持っています。最初の数字は数字のリストです。例えば、magicNumbers = [1,2,3,15,33]です。 magicObjects = [ { 'magic': 1 }, {'magic: 2}, {'magic': 15} ](2つの配列を圧縮するのと同じように)疎な配列をNULLで塗りつぶす

Iはmagicプロパティの値がmagicNumbers配列であるのと同じ順序でmagicObjectからオブジェクトを含む新しい配列を作成する必要がありますもう一つはそのように、すべてのプロパティmagicを有する、オブジェクトの配列であります対応するオブジェクトがmagicObjectsでないmagicNumbersの場所には、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-way、underscore.js、あるいはもっと効果的かもしれませんか?

答えて

2

通常、これはマップid: objectに入力し、移動しながら地図からオブジェクトを取得することによって行われます。だから、代わりにN*MN+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);

+0

魔法の値は(私はちょうどマップするための配列を変換するために、 '_.indexBy'を使用する)一意であるので、おかげで、それは私の場合に有効です – saabeilin

関連する問題