使用具有唯一字段值的 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>
我有一个对象列表。我想按列获取唯一列表。 例如,我有
[
{ "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>