arrays - 使用纯 JS 或 Lodash 基于 Array 对集合键进行排序
问题描述
我想products
根据 Array 对集合键进行排序order
。我期待像expecting
. 有没有人在纯 JS 或 Lodash 库中有一个简单的解决方案?
您可以从repl.it找到源代码
谢谢
const _ = require('lodash')
var products = [
{cgst: "18", item: "UPS V Guard Slender 1450", price: "2800", sgst: "18", stock: 2},
{cgst: "9", item: "UPS V Guard Prime 1450", price: "6000", sgst: "9", stock: 30}
]
var order = ['item', 'price', 'cgst', 'sgst', 'stock']
// Expecting output
var expecting = [
{item: "UPS V Guard Slender 1450", price: "2800", cgst: "18", sgst: "18", stock: 2},
{item: "UPS V Guard Prime 1450", price: "6000", cgst: "9", sgst: "9", stock: 30}
]
解决方案
您的问题实际上是订购 CSV 字段,而不是对象属性。该Papa.unparse()
方法接受一个带有fields
和的对象data
。您可以将订单传递给它:
var products = [
{cgst: "18", item: "UPS V Guard Slender 1450", price: "2800", sgst: "18", stock: 2},
{cgst: "9", item: "UPS V Guard Prime 1450", price: "6000", sgst: "9", stock: 30}
]
var order = ['item', 'price', 'cgst', 'sgst', 'stock']
var csv = Papa.unparse({
fields: order,
data: products
});
console.log(csv);
<script src="https://cdnjs.cloudflare.com/ajax/libs/PapaParse/4.5.0/papaparse.min.js"></script>
如果您确实需要订单对象属性的顺序:
您可以Array.map()
以_.pick()
正确的顺序获取对象属性。
注意:在 ES6 中对象属性有一个顺序,但它有一些怪癖。见这篇文章。
var products = [
{cgst: "18", item: "UPS V Guard Slender 1450", price: "2800", sgst: "18", stock: 2},
{cgst: "9", item: "UPS V Guard Prime 1450", price: "6000", sgst: "9", stock: 30}
]
var order = ['item', 'price', 'cgst', 'sgst', 'stock']
// Expecting output
var expecting = [
{item: "UPS V Guard Slender 1450", price: "2800", cgst: "18", sgst: "18", stock: 2},
{item: "UPS V Guard Prime 1450", price: "6000", cgst: "9", sgst: "9", stock: 30}
]
var result = products.map(o => _.pick(o, order))
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script>
推荐阅读
- python - Django 自定义用户模型.... user.model(...) 来自哪里?
- tensorflow - 当只需要第一个元素时,为什么要创建一个新轴?
- java - JTable 保持颜色与模型而不是行
- sql - 更改 PostgreSQL 中的默认分隔符
- go - 使用模块进行构建,在 Alpine 映像下失败,但在 Windows 下很好
- android - 模拟上下文上的 FilesDir 为空
- python - 如何通过截断日期时间对象来节省存储空间?
- asp.net-mvc - 如何修复视图中未找到页面的错误?
- r - 比较 R 循环中多个数据集的多个模型的 R-Squared、AIC 和 BIC 结果
- c# - 在 Unity 中移动玩家前面的对象,基于玩家移动而不是玩家相机