return object property using lodash from array

前端 未结 4 1253
逝去的感伤
逝去的感伤 2021-01-31 19:16

I have been trying to return a property of an object by filtering it first. Here\'s what I did:

var characters = [
  { \'name\': \'barney\',  \'age\': 36, \'bloc         


        
相关标签:
4条回答
  • 2021-01-31 19:28

    You could use the Lodash chaining ability. As its name implies, it enables you to chain Lodash methods calls. _.filter and _.map are appropriate here:

    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>


    For the record, this is how you can do in pure 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)

    0 讨论(0)
  • 2021-01-31 19:33
    _.result(_.find(characters, function(obj) {
           return obj.age === 40;
    }), 'name');
    
    0 讨论(0)
  • 2021-01-31 19:39

    As elclanrs mentioned in comment before obvious solution is just to access the property age after you filtered the object.

    But if you wanted to be done in method, you can first extract all age values and then allpy find function on them:

    var ageValues = _.pluck(characters, 'age'); //returns [36, 40, 1]
    
    var resultAgeValue = _.find(ageValues, function(ageValue) {
       return  ageValue < 40
    });
    

    or, better looks in chain:

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

    try jsFiddle: http://jsfiddle.net/pqr/j8rL780u/

    0 讨论(0)
  • 2021-01-31 19:44

    _.property

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

    _.map short hand

    var array = [{a: 1, b: 2}, {a: 3, b: 4}]
    _.map(array, 'a') // => [1, 3]
    
    0 讨论(0)
提交回复
热议问题