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

更简单

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

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”字段。
例如,我要排序:

  • 首先按“降序”购买
  • 然后按“商店”
  • 然后按“过道”
  • 然后按“名称”

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

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

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

谢谢你的帮助。

al

也许像这样?

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;
});

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

例如

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

然后可以在sort函数中执行以下操作:

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

编辑:

实际上,pkgs数组中还有另一个字段称为“ ppu”,它是每单位价格。最低的ppu是将要使用的ppu。

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

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;
}, {});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

根据另一个数组的值对一个数组进行排序?

来自分类Dev

根据另一个数组的顺序对一个数组进行排序

来自分类Dev

如何根据Java中另一个数组的值对一个数组进行排序?

来自分类Dev

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

来自分类Dev

根据另一个数组中定义的排序顺序对数组进行排序

来自分类Dev

根据另一个数组的排序顺序对多个数组进行排序

来自分类Dev

根据另一个数组的排序顺序对多个数组进行排序

来自分类Dev

如何根据另一个数组的排序顺序对多个数组进行排序

来自分类Dev

根据另一个数组中的数据过滤一个数组

来自分类Dev

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

来自分类Dev

如何根据另一个数组的排序方式对一个数组进行排序?(JavaScript)

来自分类Dev

根据另一个数组对一个列表进行排序

来自分类Dev

使用JavaScript根据另一个数组对一个数组进行排序

来自分类Dev

使用比较器无法根据另一个数组对一个数组进行排序

来自分类Dev

根据另一个数组的顺序对数组数组进行排序(Ruby)

来自分类Dev

根据数组键顺序对另一个数组内的数组进行排序

来自分类Dev

根据另一个数组的排序顺序对数组进行排序

来自分类Dev

如何从php中的另一个数组排序一个数组?

来自分类Dev

根据另一个数组按顺序对数组进行排序

来自分类Dev

根据另一个数组对对象数组进行排序

来自分类Dev

PHP:根据另一个数组对数组进行排序

来自分类Dev

根据另一个数组对数组进行排序,迅速

来自分类Dev

根据PHP上的另一个数组对数组的元素进行排序

来自分类Dev

如何根据另一个数组的位置对数组进行排序?

来自分类Dev

根据另一个数组的顺序对数组进行有效排序

来自分类Dev

在绘制之前根据另一个数组对数组进行排序

来自分类Dev

如何根据另一个数组的值对数组的值进行排序

来自分类Dev

根据另一个数组中的条目拆分一个数组

来自分类Dev

根据另一个数组中的排序索引对数组重新排序

Related 相关文章

  1. 1

    根据另一个数组的值对一个数组进行排序?

  2. 2

    根据另一个数组的顺序对一个数组进行排序

  3. 3

    如何根据Java中另一个数组的值对一个数组进行排序?

  4. 4

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

  5. 5

    根据另一个数组中定义的排序顺序对数组进行排序

  6. 6

    根据另一个数组的排序顺序对多个数组进行排序

  7. 7

    根据另一个数组的排序顺序对多个数组进行排序

  8. 8

    如何根据另一个数组的排序顺序对多个数组进行排序

  9. 9

    根据另一个数组中的数据过滤一个数组

  10. 10

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

  11. 11

    如何根据另一个数组的排序方式对一个数组进行排序?(JavaScript)

  12. 12

    根据另一个数组对一个列表进行排序

  13. 13

    使用JavaScript根据另一个数组对一个数组进行排序

  14. 14

    使用比较器无法根据另一个数组对一个数组进行排序

  15. 15

    根据另一个数组的顺序对数组数组进行排序(Ruby)

  16. 16

    根据数组键顺序对另一个数组内的数组进行排序

  17. 17

    根据另一个数组的排序顺序对数组进行排序

  18. 18

    如何从php中的另一个数组排序一个数组?

  19. 19

    根据另一个数组按顺序对数组进行排序

  20. 20

    根据另一个数组对对象数组进行排序

  21. 21

    PHP:根据另一个数组对数组进行排序

  22. 22

    根据另一个数组对数组进行排序,迅速

  23. 23

    根据PHP上的另一个数组对数组的元素进行排序

  24. 24

    如何根据另一个数组的位置对数组进行排序?

  25. 25

    根据另一个数组的顺序对数组进行有效排序

  26. 26

    在绘制之前根据另一个数组对数组进行排序

  27. 27

    如何根据另一个数组的值对数组的值进行排序

  28. 28

    根据另一个数组中的条目拆分一个数组

  29. 29

    根据另一个数组中的排序索引对数组重新排序

热门标签

归档