如何使用Lodash按顺序将对象转换为Array

时间:2018-10-22 13:46:31

标签: lodash

说我有对象:

obj {
  1:{
    index: 3
  },
  2:{
    index: 1
  },
  3:{
    index: 2
  },
  4:{
    index: 0
  }
}

我想将其转换为数组,但顺序为“索引”,因此输出应为

[ { index: 0 }, { index: 1 }, { index: 2 }, { index: 3 } ]

像_.values一样,但是能够按属性排序吗?

2 个答案:

答案 0 :(得分:1)

您将找不到一种方法来完成您想要的所有事情。相反,您应该将操作分成较小的块并将它们链接起来。如您所写:

  

类似于_.values,但可以按属性排序

您写了两个操作:从映射中提取值(使用_.values),然后按属性对结果数组进行排序(可以通过_.sortBy完成)。

要在Lodash中启动一系列操作,请使用_.chain,并使用chain.value()来实现一个链接。

摘要:

const obj = {
    1:{
        index: 3
    },
    2:{
        index: 1
    },
    3:{
        index: 2
    },
    4:{
        index: 0
    }
};

const result = _.chain(obj)
    .values()
    .sortBy('index')
    .value();

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

答案 1 :(得分:1)

您实际上并不需要库,因为在普通JS中,实际上只有Object.values然后是sort都是相同的:

const obj = { 1:{ index: 3 }, 2:{ index: 1 }, 3:{ index: 2 }, 4:{ index: 0 } }

const result = Object.values(obj).sort((a,b) => a.index - b.index)

console.log(result)

但是,如果您确实需要lodash,那么这实际上只是orderbysortBy,因为它们可以处理不需要执行values等的对象:

const obj = { 1:{ index: 3 }, 2:{ index: 1 }, 3:{ index: 2 }, 4:{ index: 0 } }

const result = _.orderBy(obj, 'index')  // or _.sortBy

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