[英]Reformat an array of objects to an array of key'd arrays
因此,我是Java语言的新手,但我尝试将startArray重新格式化为endArray。 startArray基本上是订单对象的数组,它们将始终具有不同的orderId,但可以具有相同的companyId。 我基本上是在尝试将其切换为基于公司的名称,因此对于每个companyId,所有这些公司订单都有一系列。 我一直在尝试并尝试解决这个问题,但是老实说,我不确定从哪里开始,甚至不确定这种操作是否可行。
我正在研究Google Apps脚本,我认为它仍使用ES5语法,如果可能的话,我宁愿使用普通的javascript。
var startArray = [
{"companyId" : 1,
"orderId" : 25,
"product" : "productA"
"quantity" : 2,
"price" : 10,
},
{"companyId" : 1,
"orderId" : 20,
"product" : "productB"
"quantity" : 3,
"price" : 5,
},
{"companyId" : 2,
"orderId" : 15,
"product" : "productA"
"quantity" : 5,
"price" : 10,
}
]
var endArray = [ {
'1' = [{"orderId" : 25,
"product" : "productA"
"quantity" : 2,
"price" : 10,},
{"orderId" : 20,
"product" : "productB"
"quantity" : 3,
"price" : 5,}
},{
'2' = [{"orderId" : 15,
"product" : "productA"
"quantity" : 5,
"price" : 10,
}]
}]
]
如果您可以将结果作为对象而不是数组,则可以这样做:
var startArray = [ {"companyId" : 1, "orderId" : 25, "product" : "productA", "quantity" : 2, "price" : 10, }, {"companyId" : 1, "orderId" : 20, "product" : "productB", "quantity" : 3, "price" : 5, }, {"companyId" : 2, "orderId" : 15, "product" : "productA", "quantity" : 5, "price" : 10, } ]; var ret = {} startArray.forEach(company => { if (!ret[company.companyId]) { ret[company.companyId] = []; } ret[company.companyId].push(company); }); console.log(ret);
如果您不支持ES6,则只需for in
循环中使用经典的for in
而不是forEach
。
使用诸如reduce
方法创建一个新对象,如果还不存在,请插入一个数组作为companyId
的键:
function reduce(arr, callback, initialVal) { var accumulator = (initialVal === undefined) ? undefined : initialVal; for (var i = 0; i < arr.length; i++) { if (accumulator !== undefined) accumulator = callback.call(undefined, accumulator, arr[i], i, this); else accumulator = arr[i]; } return accumulator; } var startArray = [ {"companyId" : 1, "orderId" : 25, "product" : "productA", "quantity" : 2, "price" : 10, }, {"companyId" : 1, "orderId" : 20, "product" : "productB", "quantity" : 3, "price" : 5, }, {"companyId" : 2, "orderId" : 15, "product" : "productA", "quantity" : 5, "price" : 10, } ]; var endObj = reduce(startArray, function (accum, item) { var companyId = item.companyId; if (!accum[companyId]) accum[companyId] = []; delete item.companyId; accum[companyId].push(item); return accum; }, {}); console.log(endObj);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.