よく使うのでメモ。
次のようなオブジェクトの配列(連想配列の配列)があった場合、
//オブジェクトの配列
var objArray = [
{'name':'apple','price':300, 'weight':100},
{'name':'orange','price':200 , 'weight': 50},
{'name':'banana','price':100, 'weight': 120}
];
###関数
/**
* @function Array.prototype.pickObj オブジェクトの配列から要素を抜き出す
*/
if(!Array.prototype.pickObj){
Object.defineProperty(Array.prototype, "pickObj", {
configurable: false,
enumerable: false,
writable: false,
/**
* @string keys オブジェクトのキー
* @param patterns 探索する値
*/
value: function(key,...patterns) {
return this.filter(e => patterns.includes(e[key]));
}
});
}
※2018/10/31修正
上記方法2及び3については、当初、inArray処理を無骨にも以下のように定義していたのですが、ttatsfさんコメントよりArray.prototype.includes (ES2016) を採用しました。
const inArray = (value,array) => [].indexOf.call(array,value) > -1; //inArrayの定義
###処理→出力
var objArray = [
{'name':'apple','price':300, 'weight':100},
{'name':'orange','price':200 , 'weight': 50},
{'name':'banana','price':100, 'weight': 120}
];
console.log(objArray.pickObj('price',300)); //価格が300に等しい
console.log(objArray.pickObj('price',100, 200)); //価格が100または200に等しい
###結果
{'name':'apple','price':300}
[
{'name':'orange','price':200, 'weight':50},
{'name':'banana','price':100, 'weight': 120}
]