JavaScript
es2015
es2016

Javascriptでオブジェクトの配列から特定の値を持つ要素を抜き出す

よく使うのでメモ。

次のようなオブジェクトの配列(連想配列の配列)があった場合、

//オブジェクトの配列

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}
]