2011-02-04 5 views
0

私は、同じ特性をそれぞれ持つオブジェクトのJavaScriptの配列、このようなものを持っている:プロパティの1つに基づいてJavaScriptオブジェクトの配列のサブセットを作成しますか?

box[0] = { name: 'somename', /* more properties... */ }; 
box[1] = { name: 'othername', /* more properties... */ }; 
box[2] = { name: 'onemorename', /* more properties... */ }; 
// more objects in the array... 

私はそれは名前だけの「リスト」と一致し、コピーしたオブジェクトが含まれているように、この配列のサブセットたいですおそらくcacheという名前の別の配列にはないものです。私はこのオブジェクトの配列を別の配列と比較できるかもしれないと思っていたかもしれません。一致する文字列を含む文字列のリストが入っていて、各オブジェクトのnameプロパティをこのリストと照合して一致する配列を作成します。私はこれがうまくいくかどうか、あるいは私が望むものを達成するための最良のアプローチであるかどうかはわかりません。それが私があなたの助けを求めている理由です。たぶん、200〜500個のオブジェクトのそれぞれを100個の名前のリストと照合することは、あまり良いことではありません。私は本当に分かりません。

どうすればいいですか?あなたが私に例を教えてもらえますか?

ありがとうございます。名前に一致するものと、そうでないもの - あなたがしたいん名前のリストを想定し

+1

ない重複しますが、この質問はあなたが望むものに非常に接近します。http ://stackoverflow.com/questions/4893835/javascript-find-in-array –

答えて

0

が配列に格納され、

var wantedNames = [ "first name", "second name", .. ]; 

は、2つの配列を持っています。ボックスオブジェクト内の各項目をループし、リストに名前が含まれている場合はその項目を含めます。

var objectsMatchingName = box.filter(function(item) { 
    return wantedNames.indexOf(item.name) !== -1; 
}); 

var cache = box.filter(function(item) { 
    return objectsMatchingName.indexOf(item) === -1; 
}); 

私はいくつかの種類の配列差操作があったことを望むので、あなたは(擬似コードで)行うことができます:

var cache = box - objectsMatchingName 
+0

forEachは標準ではありません。 &indexOfは標準ではありません – Raynos

+0

@RaynosそれはECMAScript 5です... http://es5.github.com/#x15.4.4.18 http://es5.github.com/#x15.4.4.14 –

+0

ありがとう私はforEach&indexOfを使うことができるように、Underscore.jsライブラリでこのことを知っています。それがどのように働いているかをお知らせします。 – VerizonW

関連する問題