javascript - 在循环中使用逻辑或运算符对数组进行排序
问题描述
我有一个这样的数组:
var planets_info = [
{
"name": "Mercury",
"size": 120,
"color": "gray",
},
{
"name": "Earth",
"size": 100,
"color": "blue",
},
{
"name": "Mars",
"size": 200,
"color": "red",
}
];
我正在尝试根据名称和大小或颜色进行排序。这是这样定义的:
var sorts = "size,name"; // or size, name, color dynamic value
我可以这样排序:
planets_info = planets_info.sort( function(a, b){
return a.size - b.size || a.color - b.color;
// or
// return a.size - b.size || a.color - b.color || a.name - b.name;
// or
// a.color - b.color || a.name - b.name;
});
但我不知道如何修改排序,以便它根据来自的值进行排序var sorts
- 因此 a.size - b.size || a.color - b.color;
将根据来自的值动态sorts
- 它可以基于name,size
或name,size,color
将添加||
:
var sorts = "size,name";
sorts = sorts.split(',');
sorts.forEach(element=> {
console.log("sort " + element);
});
解决方案
您可以使用所需键的数组进行排序,并使用短路来比较值。
const
planets = [{ name: "Mercury", size: 120, color: "gray" }, { name: "Earth", size: 100, color: "blue" }, { name: "Mars", size: 200, color: "red" }],
sorts = ["size", "name"];
planets.sort((a, b) => {
let v;
sorts.some(k => v = a[k] > b[k] || -(a[k] < b[k]));
return v;
});
console.log(planets);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- class - symfony 5:双向类关系中的映射错误
- java - 从另一个控制器调用方法时出现空指针异常
- c++ - 分配和仅使用 = 用于字符串之间的区别
- flowchart - 美人鱼流程图:如何绘制箭头脱离箭头(不是节点)?
- python-3.x - 如何在python中将带有文本和注释的pdf转换为图像类型的pdf?
- tensorflow - 旋转图像以减少训练图像数量
- java - 在 MacOS(m1 芯片)上构建 JavaFX 项目,在 windows 10 上运行 .jar 文件
- r - 有没有办法返回具有特定平均列值的行的名称?
- express - Ts.ED 简单静态服务器意外404故障
- applescript-objc - 如何从组合框项目中获取价值?