web-dev-qa-db-ja.com

配列からlodashを使用してオブジェクトプロパティを返す

私はオブジェクトのプロパティを最初にフィルタリングすることで返そうとしています。私がやったことは次のとおりです。

var characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true },
  { 'name': 'pebbles', 'age': 1,  'blocked': false }
];

_.find(characters, function(chr) {
     return  chr.age == 40
});

特定のプロパティを返したいオブジェクト全体を返します。誰でも私にそれを行う方法を案内できますか?

任意の助けをいただければ幸いです。

21
Salman

Lodash 連鎖能力 を使用できます。その名前が示すように、Lodashメソッド呼び出しを連鎖させることができます。 _.filter および _.map はここで適切です:

const characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true  },
  { 'name': 'pebbles', 'age': 1,  'blocked': false },
]

const names = _(characters)
  .filter(c => c.age < 40)
  .map('name')
  .value()

alert(names)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.3.0/lodash.min.js"></script>

記録のために、これはあなたが純粋なJSでできることです:

const characters = [
  { 'name': 'barney',  'age': 36, 'blocked': false },
  { 'name': 'fred',    'age': 40, 'blocked': true  },
  { 'name': 'pebbles', 'age': 1,  'blocked': false },
]

const names = characters
  .filter(c => c.age < 40)
  .map(c => c.name)

alert(names)
51
aymericbeaumet
_.result(_.find(characters, function(obj) {
       return obj.age === 40;
}), 'name');
7
Ninja

_。property

var array = [{a: 1, b: 2}, {a: 3, b: 4}]
array.map(_.property('a')) // => [1, 3]

_。map ショートハンド

var array = [{a: 1, b: 2}, {a: 3, b: 4}]
_.map(array, 'a') // => [1, 3]
7
Chun Yang

elclanrsは、明らかな解決策の前にコメントで言及されているように、オブジェクトをフィルタリングした後にプロパティageにアクセスするだけです。

しかし、メソッドで実行したい場合は、最初にすべての年齢の値を抽出し、次にそれらのfind関数をallpyできます:

var ageValues = _.pluck(characters, 'age'); //returns [36, 40, 1]

var resultAgeValue = _.find(ageValues, function(ageValue) {
   return  ageValue < 40
});

または、チェーンの見た目が良い:

var resultAgeValue = _(characters).pluck('age').find(function(ageValue) {
   return  ageValue < 40
});

jsFiddleを試してください: http://jsfiddle.net/pqr/j8rL780u/

0
Petr