我已经设法根据键值将一个数组分成不同的组。我想要实现的是将这些或多或少的组变成一个数组,所以我的组变成了 [[Regio__c],[Categorie__c]]
而不是 {Regio__c:[] ,类别__c:[]}
。这与普通的 javascript 没有库。
我试过:return [key].concat.split;
这会返回 undefined。
下面是我的代码片段
var filter = [{
"Id": "120",
"arrayPicklist": "Categorie__c"
}, {
"Id": "121",
"arrayPicklist": "Regio__c"
},
{
"Id": "122",
"arrayPicklist": "Categorie__c"
}, {
"Id": "123",
"arrayPicklist": "Regio__c"
},
{
"Id": "121",
"arrayPicklist": "Regio__c"
}
]
function splitArrayByValue(arr, key) {
var split = {};
for (var i = 0; i < arr.length; i++) {
var p = arr[i][key];
if (!split[p]) {
split[p] = [];
}
split[p].push(arr[i])
}
return split;
}
var buckets2 = splitArrayByValue(filter, 'arrayPicklist');
console.log(buckets2);
最佳答案
您快完成了,您需要获取值。另一种方法是使用函数 Object.values
var filter = [{ "Id": "120", "arrayPicklist": "Categorie__c" }, { "Id": "121", "arrayPicklist": "Regio__c" }, { "Id": "122", "arrayPicklist": "Categorie__c" }, { "Id": "123", "arrayPicklist": "Regio__c" }, { "Id": "121", "arrayPicklist": "Regio__c" }]
function splitArrayByValue(arr, key) {
var split = {};
for (var i = 0; i < arr.length; i++) {
var p = arr[i][key];
if (!split[p]) {
split[p] = [];
}
split[p].push(arr[i])
}
return Object.values(split);
}
var buckets2 = splitArrayByValue(filter, 'arrayPicklist');
console.log(buckets2);
您可以使用函数 reduce
进行分组,然后使用函数 Object.values
获得所需的输出。
var filter = [{"Id":"120","arrayPicklist":"Categorie__c"},{"Id":"121","arrayPicklist":"Regio__c"},{"Id":"122","arrayPicklist":"Categorie__c"},{"Id":"123","arrayPicklist":"Regio__c"},{"Id":"121","arrayPicklist":"Regio__c"}];
var result = Object.values(filter.reduce((a, {Id, arrayPicklist}) => {
(a[arrayPicklist] || (a[arrayPicklist] = [])).push({Id, arrayPicklist});
return a;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
关于javascript - 将组转换为数组 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49456250/