kou*_*tst 5 javascript arrays sorting javascript-objects
我想通过"user"对象中的"name"对下面的数组进行排序
var myArr = [
{"id":1,"user":{"name":"allen","id":101}},
{"id":2,"user":{"name":"martin","id":102}}
]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我有一个方法来排序对象数组,但我不能将它用于对象的数组
这是方法:
function dynamicSort(property) {
var sortOrder = 1;
if (property[0] === "-") {
sortOrder = -1;
property = property.substr(1);
}
return function (a, b) {
var result = (a[property] < b[property]) ? -1 : (a[property] > b[property]) ? 1 : 0;
return result * sortOrder;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我可以使用这个排序:
myArr.sort(dynamicSort("id"));
Run Code Online (Sandbox Code Playgroud)
我将创建属性作为一个getter函数(对于复杂的例子.你可以检查propFn是否是一个函数,使用下面的代码来处理更复杂的函数.看看这个答案是为了检查propFn是一个函数.):
var myArr = [
{"id":1,"user":{"name":"allen","id":101}},
{"id":2,"user":{"name":"martin","id":102}}
]
function dynamicSort(propFn, sortOrder = 1) {
return function (a, b) {
var result = (propFn(a) < propFn(b)) ? -1 : (propFn(a) > propFn(b)) ? 1 : 0;
return result * sortOrder;
}
}
console.log(myArr.sort(dynamicSort((obj) => obj.user.name)));
console.log(myArr.sort(dynamicSort((obj) => obj.user.name, -1)));Run Code Online (Sandbox Code Playgroud)
或者,您可以查看:将点表示法中的JavaScript字符串转换为对象引用
这将让您了解如何将句点符号转换为嵌套对象,但我建议您阅读顶部的免责声明.
为了保持向后兼容性,您可以使用以下内容:
var myArr = [
{"id":1,"user":{"name":"allen","id":101}},
{"id":2,"user":{"name":"martin","id":102}}
]
function dynamicSort(propFn, sortOrder = 1) {
if (typeof propFn === "string") {
let prop = propFn;
if (prop[0] === "-") {
sortOrder = -1;
prop = prop.substr(1);
}
propFn = (obj) => obj[prop];
}
return function (a, b) {
var result = (propFn(a) < propFn(b)) ? -1 : (propFn(a) > propFn(b)) ? 1 : 0;
return result * sortOrder;
}
}
console.log(myArr.sort(dynamicSort((obj) => obj.user.name)));
console.log(myArr.sort(dynamicSort((obj) => obj.user.name, -1)));
console.log(myArr.sort(dynamicSort("id")));
console.log(myArr.sort(dynamicSort("-id")));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
132 次 |
| 最近记录: |