【问题标题】:Sort JavaScript object by length of array properties按数组属性的长度对 JavaScript 对象进行排序
【发布时间】:2019-03-02 04:52:19
【问题描述】:

我有一个这样的对象:

var list = {
  "you": [100,200,300], 
  "me": [75,4,5,6,8,9], 
  "foo": [116,345,1,23,56,78], 
  "bar": [15,34]
};

有没有办法通过数组属性的长度来sort这个对象?

预期输出:

var res =  [[116,345,1,23,56,78],[75,4,5,6,8,9],[100,200,300],[15,34]]

我尝试使用 lodash 的 sortby 函数。

var data = {
  "abc": ["20288", "d8f0", "4a5d", "1a8a0"],
  "kkl": ["bnb", "lll", "zxc"],
  "F17": ["ee547", "42e9"],
  "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"]
}

var res = _.sortBy(data, function(val) {
  return parseInt(val.length);
});

console.log(res);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>

【问题讨论】:

标签: javascript arrays sorting javascript-objects


【解决方案1】:
  1. 如果您希望输出为排序数组值的数组:

    使用 destructuring assignment 通过调用 Object.values 从结果数组中获取 length 属性,然后按降序对其进行排序。

const data = {
  "abc": ["20288", "d8f0", "4a5d", "1a8a0"],
  "kkl": ["bnb", "lll", "zxc"],
  "F17": ["ee547", "42e9"],
  "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"]
};
const res = Object.values(data).sort(({length:a}, {length:b}) => b - a);
console.log(res);

  1. 如果您想通过根据数组值的长度重新排列键来对对象本身进行排序。

    有没有办法按数组的长度对这个对象进行排序 属性?

    如果要按照数组值的length重新排列原始对象的属性,那么我们首先需要按key排序,然后创建一个new object 使用 Array.reduce 键的排序顺序。

const data = {
  "abc": ["20288", "d8f0", "4a5d", "1a8a0"],
  "kkl": ["bnb", "lll", "zxc"],
  "F17": ["ee547", "42e9"],
  "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"]
};
//sorting in descending order
const obj = Object.keys(data)
                  .sort((a, b) => data[b].length - data[a].length )
                  .reduce((acc, ele) => { acc[ele] = data[ele]; return acc; }, {});

console.log(obj);

【讨论】:

  • @Eswar,很高兴为您提供帮助,如果对您有帮助,请接受我的回答!
【解决方案2】:

您可以使用 Object.values() 获取数组中的值,然后使用 sort 根据 length 生成二维数组,如下所示:

var data = {
  "abc": ["20288", "d8f0", "4a5d", "1a8a0"],
  "kkl": ["bnb", "lll", "zxc"],
  "F17": ["ee547", "42e9"],
  "cnv": ["20288", "d8f0", "4a5d", "1a8a0", "jh67"]
}

const res = Object.values(data).sort((a, b) => b.length - a.length)
console.log(res)

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2017-05-31
    • 1970-01-01
    相关资源
    最近更新 更多