私はすでにこれを解決しました。ただし、変数には数千のオブジェクトがあるため、より高速なソリューションを探しています。
私はこのような2つの配列を持っています:
var full = [{a:'aa1',b:'bb1'},{a:'aa3',b:'bb2'},{a:'aa3',b:'bb3'},{a:'aa2',b:'bb3'}],
some = [{a:'aa1',b:'bb1'},{a:'aa3',b:'bb3'}];
オブジェクトがいくつかに存在する場合に呼び出される新しい属性でフラグを立てようとしています。期待される結果:c
full
[{a:'aa1',b:'bb1',c:true},{a:'aa3',b:'bb2'},{a:'aa3',b:'bb3',c:true},{a:'aa2',b:'bb3'}]
いくつかの重要なヒント:
- 一部は常に完全よりも少ない要素を持っています
- 両方の配列は等しくソートされます
私の現在のアプローチは次のとおりです。
var getIndexByAB = function(arr, a,b){
var initialIndex = getIndexByAB.initialIndex || 0,
len = arr.length;
for(initialIndex; initialIndex < len ;initialIndex++ ){
var el = arr[initialIndex];
if( el.b === b && el.a === a ){
getIndexByAB.initialIndex = initialIndex;
return initialIndex;
}
}
return -1;
}
var len = some.length;
for(var i = 0; i < len ; i++){
var el=some[i],
index = getIndexByAB(full,el.a,el.b);
if(index > -1) full[index].c = true;
}
UPDADE:Juanコメントを使用して改善された元のソリューション。