我希望我的解释是正确的。我有一个包含对象的数组:
$scope.items1 = [
[
{
"answer": "BARCELONA",
"idcustomer": 6,
"order": 1.1
},
{
"answer": "REAL MADRID",
"idcustomer": 6,
"order": 1.4
},
{
"answer": "LYON",
"idcustomer": 6,
"order": 1.2
},
{
"answer": "BAYERN",
"idcustomer": 6,
"order": 1.3
}
],
[
{
"answer": "BENFICA",
"idcustomer": 7,
"order": 1.2
},
{
"answer": "ARSENAL",
"idcustomer": 7,
"order": 1.4
},
{
"answer": "CITY",
"idcustomer": 7,
"order": 1.1
},
{
"answer": "UNITED",
"idcustomer": 7,
"order": 1.3
}
]
];
我需要创建一个包含此数组值的新数组。
我需要的最终结果是: - 第一个位置是 idcostumer 。 - 按订单排序。 - 具有回答属性的答案。
$scope.result = [
[6, "BARCELONA", "LYON", "BAYERN", "REAL MADRID"],
[7, "CITY", "BENFICA", "UNITED", "ARSENAL"]
];
感谢您的帮助和建议。
答案 0 :(得分:1)
听起来你可以使用the reduce
method。 reduce
允许您遍历数组以累积值。
任何一种结构都应该可以正常工作,显然它只会影响你编写方法的方式来转换你想要的数据。我会为你做第一件事:
$scope.result = $scope.items1.map(function(answerData){
answerData = answerData.sort(function(a, b) {
return a.order < b.order ? -1 : 1
});
return answerData.reduce(function(result, value) {
result.push(value.answer);
return result;
}, [answerData[0].idcustomer]);
});
让我们打破这个。我们使用map
迭代您的$scope.items1
数组,并为数组中的每个值返回一些内容。由于$scope.items1
是数组(或2D数组)的数组,因此每个answerData
值本身就是一个数组。首先,我们按answerData
对order
数组进行排序。然后,我们在每个reduce
数组上使用answerData
来获取仅包含idcustomer
和每个answer
字段的数组。 reduce
采用回调函数和初始值。在这种情况下,初始值为[answerData[0].idcustomer]
。请注意,如果answerData
为空,这将会中断!我们为回调函数result
和value
定义了两个参数。 result
是前面每次迭代的总累计结果,value
是数组的当前元素。对于每个value
,我们只需将其answer
字段推送到result
数组,然后返回更新后的数组。
从第一个idcustomer
元素中取出answerData
字段有点奇怪,因此您的第二个数据结构实际上可能会更好。但是,我会告诉你如何做到这一点!
编辑:由于您编辑的问题仅包含其他结构,因此这是您需要的转换:
$scope.result = $scope.items.map(function(answerData) {
var sortedDescription = answerData.description.sort(function(a,b) {
return a.order < b.order ? -1 : 1;
});
return sortedDescription.reduce(function(result, value) {
result.push(value.answer);
return result;
}, [answerData.idcustomer]);
});