web-dev-qa-db-ja.com

NodeJSはキーの値によって配列内のオブジェクトを検索します

私はそのキーのいずれかの値によって配列内のオブジェクトを取得しようとしています。

配列:

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でそれを行う方法はありますか?

これは重複ではありません。

14

Lodashと矢印関数を使用すると、次のように簡単になります。

var picked = lodash.filter(arr, x => x.city === 'Amsterdam');

...またはオブジェクト表記と交互に。

var picked = lodash.filter(arr, { 'city': 'Amsterdam' } );

注:上記の回答はpickByに基づいていましたが、@ torazaburoが以下で指摘しているように、ユースケースには適していません。

12

Array.prototype.find() を純粋なjavascriptで使用できます。

var picked = arr.find(o => o.city === 'Amsterdam');

現在、すべてのブラウザで compatible ではないため、環境で確認する必要があります(ただし、NodeJSで動作するはずです)。

61
madox2

古典的な方法はさらに簡単です

試してみる

var output = arr.filter(function(value){ return value.city=="Amsterdam";})
4
gurvinder372

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>");
2
Rajesh