gpt4 book ai didi

javascript - 根据另一个数组中的数据对数组进行排序

转载 作者:数据小太阳 更新时间:2023-10-29 04:14:54 25 4
gpt4 key购买 nike

我有两个对象数组,如下所示:

items = [{"id":"5","tobuy":"1","name":"pop"},
{"id":"6","tobuy":"1","name":"fish"},
{"id":"7","tobuy":"0","name":"soda"}]
pkgs = [{"item_id":"5","store":"Market","aisle":"3"},
{"item_id":"6","store":"Market","aisle":"2"},
{"item_id":"6","store":"Dept","aisle":"8"},
{"item_id":"7","store":"Market","aisle":"4"}]

我正在尝试对 items 数组进行排序,但我想利用 pkgs 数组中的数据。
pkgs数组中的“item_id”字段对应items数组中的“id”字段。
比如我要排序:

  • first by "tobuy" in descending order
  • then by "store"
  • then by "aisle"
  • then by "name"

虽然item_id和id在两个数组之间是一一对应的,但并不是一对一的关系。可能有 0 个或多个 pkg 对应于任何给定的项目。

(如果我有一个数据库,我会只连接表,但在 JavaScript 中我只有两个相关的数组)。

我不确定如何构建比较器函数并传入第二个数组。

感谢您的帮助。

最佳答案

也许是这样的?

items = items.map(function (item, index) {
return {
item: item,
pkg: pkgs[index] //I assumed associated pkgs were at the same index
};
}).sort(function (a, b) {
var pkgA = a.pkg, pkgB = b.pkg, r;

r = +b.item.tobuy - +a.item.tobuy;

if (r !== 0) return r;

r = pkgA.store < pkgB.store? -1 : (pkgA.store === pkgB.store? 0 : 1);

if (r !== 0) return r;

r = +pkgA.aisle - +pkgB.aisle;

if (r !== 0) return r;

return pkgA.name < pkgB.name? -1 : (pkgA.name === pkgB.name? 0 : 1);

}).map(function (item) {
return item.item;
});

除了合并数据,您还可以创建一个查找映射,允许直接从排序函数快速检索关联的包。

例如

var pkgsMap = pkgs.reduce(function (res, pkg) {
res[pkg.item_id] = pkg;
return res;
}, {});

然后在排序函数中你可以这样做:

var pkgA = pkgsMap[a.id], pkgB = pkgsMap[b.id];

编辑:

There is actually another field in the pkgs array called "ppu" which is the price per unit. The lowest ppu is the one that would be used.

您可以使用以下方法构建您的包映射,然后在排序函数中使用该映射来检索关联的包,如上所述并实现排序算法。

var pkgsMap = pkgs.sort(function (a, b) {
//not sure what ppu is so I sort it as a string
return a.ppu < b.ppu? -1 : Number(a.ppu > b.ppu);
}).reduce(function (res, pkg) {
if (!(pkg.item_id in res)) res[pkg.item_id] = pkg;
return res;
}, {});

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

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