javascript - javascript - 根据属性重新排序对象数组
问题描述
我正在为网页构建一个选择下拉输入。我想创建一个显示在下拉列表顶部的“流行”选项组。
我正在使用以下结构中的数据。我需要找到一种方法来根据他们的名字对 people 数组中的项目进行重新排序。
例如移动:
pogo-stick 从玩具 [2] -> 玩具 [0]
卡片从玩具 [3] 到玩具 [2]
我将拥有一系列受欢迎的玩具,例如:
popularToys: [
"cards", "pogo-stick"
]
如何遍历对象数组并将它们移动到新顺序?
数据:
{
"toys": [
{
"name": "car",
"price": "10"
},
{
"name": "duck",
"price": "25"
},
{
"name": "pogo-stick",
"price": "60"
},
{
"name": "cards",
"price": "5"
}
]
}
解决方案
您可以使用自定义排序功能
var popularToys = [
"cards", "pogo-stick"
]
var data = {
"toys": [
{
"name": "car",
"price": "10"
},
{
"name": "duck",
"price": "25"
},
{
"name": "pogo-stick",
"price": "60"
},
{
"name": "cards",
"price": "5"
}
]
};
function popularFirst(a, b) {
var aIsPopular = popularToys.indexOf(a.name) > -1;
var bIsPopular = popularToys.indexOf(b.name) > -1;
if (aIsPopular) {
// b could be popular or not popular, a still comes first
return -1;
} else if (bIsPopular) {
// a isnt popular but b is, change the order
return 1;
} else {
// no change
return 0;
}
}
console.log(data.toys.sort(popularFirst));
推荐阅读
- python - 如何使用单独的文件迭代和格式化数据框中的行
- typescript - 在 Typescript 中,取消设置/重置数字属性的首选方法是什么:未定义?空的?无效的?
- c# - .Net:解压Gz文件:内存不足,无法继续执行程序
- javascript - 定义字符串 y 轴项的顺序
- jquery - jQuery 属性选择器匹配一个或多个
- python - 尝试更快/更轻松地汇总大量列...感谢帮助
- c# - EF Core 多对多插入:如何很好地避免 EF 尝试添加已经存在的唯一约束子实体?
- spring - Spring Security OAuth2 何时检查访问令牌过期?
- c++ - 从主命令行中分离多个程序的参数
- amazon-web-services - 在 AWS Step Functions (boto3) 中获取任务状态