【问题标题】:javascript,lodash:- how to sort array of objects where object having object insidejavascript,lodash:-如何对对象数组进行排序,其中对象内部有对象
【发布时间】:2017-05-09 09:03:13
【问题描述】:
var a = [
   {  
        "subObj1": {  
            "key1":10722905,
            "key2":"0080817626"
        },
        "outerKey1":"abcd",
        "outerKey2":"defg"
    },
    {  
        "subObj1": {  
            "key1":123456,
            "key2":"0987654"
        },
        "outerKey1":"pqrs",
        "outerKey2":"ased"
    }
]

我需要分别使用 key1 和 outerkey1 对这个对象数组进行排序。这个逻辑已经实现了。

_.sortBy(a,'outerKey1') -> 一切正常。

_.sortBy(a,'key1') -> 这不起作用。

_.sortBy(a,'subObj1.key1') -> 这也不行。

有什么方法可以使用 lodash _.sortBy 函数使用对象的内部键(如 key1 或 key2)对这个对象数组进行排序?

【问题讨论】:

  • 请向我们展示您到目前为止所做的尝试
  • @Sagar 我是 lodash 的新手。我已经尝试使用 _.sortBy 通过提供不同的参数作为 key1 和 subObj1.key1 ..但是它返回了相同的对象而没有排序。
  • 使用listjs.com,它是微小、不可见且简单,但功能强大且速度极快的原生 JavaScript,可为纯 HTML 列表、表格或任何内容添加搜索、排序、过滤器和灵活性。
  • a.sort((a,b)=> a.subObj1.key1 - b.subObj1.key1)

标签: javascript arrays sorting object lodash


【解决方案1】:

仅使用 JavaScript,您可以使用 Array.prototype.sort() 以及自定义回调函数:

var sorted = arr.sort(function(a, b) {
  a.subObj1.key1 - b.subObj1.key1
});

演示:

var arr = [{
    "subObj1": {
      "key1": 10722905,
      "key2": "0080817626"
    },
    "outerKey1": "abcd",
    "outerKey2": "defg"
  },
  {
    "subObj1": {
      "key1": 123456,
      "key2": "0987654"
    },
    "outerKey1": "pqrs",
    "outerKey2": "ased"
  }
];

var sorted = arr.sort(function(a, b) {
  a.subObj1.key1 - b.subObj1.key1
});

console.log(sorted);

编辑:

如果你想用lowdash 来做这件事,你可以使用_.sortBy() 和自定义排序功能:

var customSorter = function(obj) {
  return obj.subObj1.key1;
};
var sorted = _.sortBy(arr, customSorter);

演示:

var arr = [{
    "subObj1": {
      "key1": 10722905,
      "key2": "0080817626"
    },
    "outerKey1": "abcd",
    "outerKey2": "defg"
  },
  {
    "subObj1": {
      "key1": 123456,
      "key2": "0987654"
    },
    "outerKey1": "pqrs",
    "outerKey2": "ased"
  }
];

var customSorter = function(obj) {
  return obj.subObj1.key1;
};
var sorted = _.sortBy(arr, customSorter);

console.log(sorted);
<script src="http://underscorejs.org/underscore-min.js"></script>

【讨论】:

  • 感谢您的快速回答,但我已经在使用 lodash 对具有相同功能的其他参数进行排序。我不想只为这种类型更改整个逻辑。有没有办法使用 lodash 来做到这一点?
  • @RoshanJoshi 不依赖库人,javascript 完成所有工作,获取应用程序 Kapeli Dash 并查找 Array.prototype 函数,这些函数是所有数组都具有的继承后备函数
  • @neaumusic 感谢您的建议。我在很多地方都在使用那个库,所以不想只为了一个地方的改变而改变它。会记住这一点。
  • @chsdk 感谢自定义排序器。工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
  • 2019-01-08
  • 1970-01-01
  • 2011-09-06
  • 2018-08-18
相关资源
最近更新 更多