这是一个非常简单的问题。我想映射并形成给定另一个数组的数组。那么我想删除重复的值。
这就是我所做的:
public ActionResult Index(string aidYear)
{
aidYear = string.IsNullOrEmpty(aidYear) ? new FinAidYear().GetCurrentYear() : aidYear;
string username = User.Identity.Name;
if (!Authorization.CheckUsernameDept(username))
return RedirectToAction("NotAuthorized", "Account");
var user = new UserStore().GetUser(username);
var aidYears = new AidYearStore().GetAidYears();
var scholarships = new ScholarshipStore().GetScholarships(user.DeptCode, aidYear);
var availableScholarships = scholarships.Where(x => x.AmountTotal > x.AmountRequested);
var terms = new TermStore().GetAllTerms();
var requestVM = new RequestViewModel
{
AidYear = aidYear,
AidYears = aidYears,
User = user,
Scholarships = scholarships,
AvailScholarships = availableScholarships,
Terms = terms
};
return View(requestVM);
}
有效。但是我想要一个不涉及编写两个代码块的解决方案。我尝试过:
let status = listHotels.map(hotel => {
return hotel.status
})
const x = status.filter((v, i) => (
status.indexOf(v) === i
));
但是它没有用。它说
无法读取未定义的属性'indexOf'
有人知道解决方法吗?
答案 0 :(得分:5)
.filter
方法时,仍未定义状态。
将其更改为:
let status = listHotels.map(hotel => {
return hotel.status
}).filter((v, i, currentStatus) => (
currentStatus.indexOf(v) === i
));
答案 1 :(得分:2)
您可以使用findIndex
,传递一个用于比较状态的函数并在以下位置交换过滤器/地图来做到这一点:
const listHotels = [{status: 'bad'}, {status: 'good'}, {status: 'bad'}];
let status = listHotels.filter((v, i) =>
listHotels.findIndex(v2 => v.status === v2.status) === i
).map(hotel => hotel.status);
console.log(status);
答案 2 :(得分:1)
状态尚未准备好(undefined
)可以访问filter()
内部。但是在第一种解决方案中, map()返回结果并将结果存储在 status 中,这将使变量在以后的语句中可用。
您可以将数组本身作为第三个参数传递给filter()
。您也不需要在这里使用不必要的 return 语句:
var listHotels = [{status:'a'}, {status:'b'}, {status:'a'}]
let status = listHotels.map(hotel => hotel.status)
.filter((v, i, arr) => arr.indexOf(v) === i);
console.log(status);
答案 3 :(得分:0)
由于您使用的是let
和const
,所以我假设您也可以使用ES6 Set
:
const data = [{
status: 'one',
id: 1
}, {
status: 'one',
id: 2
}, {
status: 'two',
id: 3
}, {
status: 'two',
id: 4
}]
const uniqueStatus = [...new Set(data.map(({
status
}) => status))]
console.log(uniqueStatus)
将映射的数组传递到Set
将确保唯一性。您可以将Set分解为数组。