gpt4 book ai didi

javascript - 根据对象的一个​​属性对对象数组进行排序

转载 作者:行者123 更新时间:2023-11-30 16:56:47 25 4
gpt4 key购买 nike

我不知道这是否是一个特例,但手头的问题很简单。假设您有一个数组,它定义了对象必须排序的顺序。假设这个数组是这样的:

var sort = [5, 1, 6];

此数组顺序是任意的(数字未根据任何特定规则排序),排序后的对象数组必须遵循 sort 数组中项目的顺序出现)

你有一个对象数组,就像这个:

var obj = [{id: 1}, {id: 6}, {id:5}];

所以结果(根据 sort 中的顺序和每个对象的 id 的值)应该是这样的:

obj = [{id: 5}, {id: 1}, {id:6}];

我试过这种方法:

var obj = [{id: 1}, {id: 6}, {id:5}];
var sort = [5, 1, 6];

var indexedObjArr = [],
tmpObj = {};
obj.forEach(function(item) {
tmpObj[item.id] = item;
indexedObjArr.push(tmpObj);
tmpObj = {};
});
obj = [];

//This is where it fails, obj ends up having all undefined entries
indexedObjArr.forEach(function(item, i) {
// [sort[i]] === undefined, but sort[i] gives an actual number (e.g. 5),
// and, for instance item[5], gives back the correct item
obj.push(item[sort[i]]);
});
console.log(obj);

我在这个脚本中做错了什么?或者您能想出更好的方法来解决这个问题吗?

谢谢。

最佳答案

为什么不直接使用内置的 sort数组的方法?

obj.sort(function(a, b) { return sort.indexOf(a.id) - sort.indexOf(b.id) });

var obj = [{id: 1}, {id: 6}, {id: 5}];
var sort = [5, 1, 6];

console.log(obj.sort(function(a, b) {
return sort.indexOf(a.id) - sort.indexOf(b.id)
}));

关于javascript - 根据对象的一个​​属性对对象数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29585475/

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