gpt4 book ai didi

javascript - 按属性值对 javascript 对象排序

转载 作者:行者123 更新时间:2023-11-29 20:03:16 26 4
gpt4 key购买 nike

如何对以下对象进行排序以更正名称的字母顺序?

var users_by_id = {
'12': ['Ted', 34, 'Male'],
'13': ['Ben', 36, 'Male'],
'14': ['Alice', 42, 'Female']
}

var users_by_name = {
'14': ['Alice', 42, 'Female'],
'13': ['Ben', 36, 'Male'],
'12': ['Ted', 34, 'Male']
}

我有一个计划,需要两次遍历对象,但我不确定是否有更简单的方法来做到这一点。我的计划是这样的(我正在使用 jQuery):

var users_by_name = {};
var names = [];
$.each(users_by_id, function(id, props) {
names.push(props[0]);
});
names.sort();
$.each(names, function(i, n) {
$.each(users_by_id, function(id, props) {
if(n == props[0]) users_by_name[id] = props;
});
});

最佳答案

如果您想保留基于对象的存储而不是使用数组,则需要创建对象属性的数组,然后对其进行排序以获得顺序。

var users = {
'12': ['Ted', 34, 'Male'],
'13': ['Ben', 36, 'Male'],
'14': ['Alice', 42, 'Female']
};

var props = Object.keys(users);

var user_props_by_name = props.slice().sort(function(prop_a, prop_b) {
return users[prop_a][0].localeCompare(users[prop_b][0]);
});

var user_props_by_age = props.slice().sort(function(prop_a, prop_b) {
return users[prop_a][1] - users[prop_b][1];
});

然后您可以迭代数组并使用属性名称在对象中查找项目。

user_props_by_name.forEach(function(prop) {
console.log(users[prop]);
});

user_props_by_age.forEach(function(prop) {
console.log(users[prop]);
});

虽然在添加和删除用户时这将需要一些维护。您可能希望创建一个层来添加和删除用户,并同时更新排序数组。

关于javascript - 按属性值对 javascript 对象排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13204651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com