私はそのキーのいずれかの値によって配列内のオブジェクトを取得しようとしています。
配列:
var arr = [
{
city: 'Amsterdam',
title: 'This is Amsterdam!'
},
{
city: 'Berlin',
title: 'This is Berlin!'
},
{
city: 'Budapest',
title: 'This is Budapest!'
}
];
lodash
でこのようなことを試みましたが、成功しませんでした。
var picked = lodash.pickBy(arr, lodash.isEqual('Amsterdam');
そして空のオブジェクトを返します。
どのようにこれをlodashの方法で行うことができますか(可能であれば)?古典的な方法で、新しい配列を作成し、すべてのオブジェクトをループし、基準に一致するオブジェクトをその新しい配列にプッシュすることができます。しかし、lodashでそれを行う方法はありますか?
これは重複ではありません。
Lodashと矢印関数を使用すると、次のように簡単になります。
var picked = lodash.filter(arr, x => x.city === 'Amsterdam');
...またはオブジェクト表記と交互に。
var picked = lodash.filter(arr, { 'city': 'Amsterdam' } );
注:上記の回答はpickBy
に基づいていましたが、@ torazaburoが以下で指摘しているように、ユースケースには適していません。
Array.prototype.find() を純粋なjavascriptで使用できます。
var picked = arr.find(o => o.city === 'Amsterdam');
現在、すべてのブラウザで compatible ではないため、環境で確認する必要があります(ただし、NodeJSで動作するはずです)。
古典的な方法はさらに簡単です
試してみる
var output = arr.filter(function(value){ return value.city=="Amsterdam";})
Array.filter
を使用できます
@torazaburoが正しく指摘しているように、三項演算子return item[key]?item[key] === value:false
は必要ありません。簡単なチェックreturn item[key] === value
で問題ありません。
var arr = [{
city: 'Amsterdam',
title: 'This is Amsterdam!'
}, {
city: 'Berlin',
title: 'This is Berlin!'
}, {
city: 'Budapest',
title: 'This is Budapest!'
}];
Array.prototype.findByValueOfObject = function(key, value) {
return this.filter(function(item) {
return (item[key] === value);
});
}
document.write("<pre>" + JSON.stringify(arr.findByValueOfObject("city", "Amsterdam"), 0, 4) + "</pre>");