object array
私はそれを述語と照合してデータをフィルタリングしたいと思います。複雑さは、predicate
の構成にあり、この場合、Map
データ構造を使用して構築されたquery
のものに似ています。ここで述語角度2のフィルタ配列
は、オブジェクトの私のarray
は、次のようになります。
var map = new Map<string, any>();
map.set("name", ["henry", "bob"]);
map.set("status", "active");
この場合、正しい出力すべきである:ここで
var data = [
{"id" : 1, "name": "bob", "address": "123 abc", "status": "active"},
{"id" : 2, "name": "henry", "address": "123 def", "status": "inactive"},
{"id" : 3, "name": "henry", "address": "123 hij", "status": "active"}
];
は `述語が構築されるべきものとはMap
構造は、あります次のとおりです。
[{"id" : 3, "name": "henry", "address": "123 hij", "status": "active"}]
私のdata.filter((item) => {...})
ルーチンを使用して、predicate
を動的に構築し、結果をフィルタリングします。私はproperty
の名前をハードコードすることは望ましくありません。なぜなら、フィルタリングするプロパティのいずれかになる可能性があるからです。
第2に、値はtype any
であり、これはstring
,array
または数値であることができることを意味します。私は、述語にMap
オブジェクトを平らにする方法を見つけ出す、その後、必要に応じてフィルタリングすることができません
data.filter((item) =>
{ item["name"] IS IN map.get("name").values[]
&& item["status"] IS EQUAL TO map.get("status").value)});
:述語は、これに似たものと評価されます。どんな手がかりや助けが本当に役に立つでしょう。
これはうまくいくように見えますが、私は「for」を使用できません。代わりに「foreach」が働いています。しかし、 'foreach'の短絡を防ぐことはできません。 – faizanjehangir
' forEach'ではなく 'for'ループを使うのはなぜですか? – Lee
すべての 'keys()と.entries()'が動作しmap iterableを返す 'es5'と' map'データ型を使用していますが、forループでどのように反復することをお勧めしますか? – faizanjehangir