使用具有唯一字段值的 Underscore JS 过滤列表

Filter List using Underscore JS with unique field value

我有一个对象列表。我想按列获取唯一列表。 例如,我有

[
{ "city" : "Dhaka",
  "temp" : 30,
   "grade": "A"
},

{ "city" : "Comilla",
  "temp" : 32,
   "grade": "B"
},
{ "city" : "Sylhet",
  "temp" : 32,
   "grade": "A"
},
{ "city" : "Noakhali",
  "temp" : 32,
   "grade": "C"
}
]

我想在我给出列 'grade'

时得到
[
    { 
       "grade": "A"
    },
    { 
       "grade": "B"
    },
    { 
       "grade": "C"
    }

    ]

当我使用它时,

$scope.listOfFilterdItems = _($scope.dataList).chain().flatten().pluck('grade').unique().value();

我得到了字符串数组 ["A","B","C"]

我不要。我需要对象列表。 我该怎么做?

您可以使用 pick 而不是 pluck:

var result = _.chain(data)
    .map(function(city){
        return _.pick(city, 'grade')        
    })
    .uniq('grade')
    .value();

编辑

可以更改传递给 map 的函数以满足将过滤键重命名为 filter:

var gradeToFilter = function(city){
    return {
        filter: city.grade
    }
}

var result = _.chain(data)
    .map(gradeToFilter)
    .uniq('filter')
    .value();

var data = [
  { "city" : "Dhaka",
    "temp" : 30,
     "grade": "A"
  },

  { "city" : "Comilla",
    "temp" : 32,
     "grade": "B"
  },
  { "city" : "Sylhet",
    "temp" : 32,
     "grade": "A"
  },
  { "city" : "Noakhali",
    "temp" : 32,
     "grade": "C"
  }
 ];


var result1 = _.chain(data)
 .map(function(city){
  return _.pick(city, 'grade')  
 })
 .uniq('grade')
 .value();
 
var gradeToFilter = function(city){
    return {
        filter: city.grade
    }
}

var result2 = _.chain(data)
    .map(gradeToFilter)
    .uniq('filter')
    .value();

document.getElementById('result1').textContent = JSON.stringify(result1);
document.getElementById('result2').textContent = JSON.stringify(result2);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.2/underscore.js"></script>

<p>
  <pre id="result1"></pre>
</p>

<p>
  <pre id="result2"></pre>
</p>