ディープサーチJSONオブジェクトJavaScript
次のネストされたJSONオブジェクトがあるとします-
const obj = { id: 1, title: 'hello world', child: { id: null, title: 'foobar', child: { id: null, title: 'i should be in results array ' } }, foo: { id: null, title: 'i should be in results array too!' }, deep: [ { id: null, value: 'yo' }, { id: null, value: 'yo2' } ] };
最初の引数として1つのオブジェクト、2番目の引数としてキー文字列、3番目の引数として値文字列を受け取るJavaScript関数を作成する必要があります。次に、関数はJSONオブジェクトで指定されたキーと値のペアをチェックする必要があります。
オブジェクトが存在する場合、関数はそのようなすべてのオブジェクトの配列を返す必要があります。
この問題を解決するために、次のアプローチを使用します-
- 検索されたアイテムがfalseの場合、またはオブジェクトではない場合は、戻ります
- キーと値が一致する場合は、実際のオブジェクトを結果セットに追加します。
- キーを取得してプロパティを繰り返し処理し、関数を再度呼び出します。
最後に、収集されたオブジェクトを含む配列を返します。
例
const obj = { id: 1, title: 'hello world', child: { id: null, title: 'foobar', child: { id: null, title: 'i should be in results array ' } }, foo: { id: null, title: 'i should be in results array too!' }, deep: [ { id: null, value: 'yo' }, { id: null, value: 'yo2' } ] }; const findObject = (obj = {}, key, value) => { const result = []; const recursiveSearch = (obj = {}) => { if (!obj || typeof obj !== 'object') { return; }; if (obj[key] === value){ result.push(obj); }; Object.keys(obj).forEach(function (k) { recursiveSearch(obj[k]); }); } recursiveSearch(obj); return result; } console.log(findObject(obj, 'id', null));
出力
[ { id: null, title: 'foobar', child: { id: null, title: 'i should be in results array ' } }, { id: null, title: 'i should be in results array ' }, { id: null, title: 'i should be in results array too!' }, { id: null, value: 'yo' }, { id: null, value: 'yo2' } ]
-
JavaScriptでのオブジェクトの分解。
以下は、JavaScriptでオブジェクトを分解するためのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> &nbs
-
JavaScriptのWeakMapオブジェクト。
WeakMapオブジェクトには、要素としてキーと値のペアがあり、キーはオブジェクトである必要があり、値は任意のプリミティブ値またはオブジェクトにすることができます。 WeakMapでキーとして使用されるオブジェクトは、それらへの参照がない場合、ガベージコレクションされます。 以下はJavaScriptのWeakMapオブジェクトのコードです- 例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name=&