我的数据结构如下:
a : { active: true, key: "first", page: 1 },
b : { active: true, key: "second", page: 1 },
c : { active: true, key: "third", page: 2 },
d : { active: true , key: "fourth", page: 2 },
e : { active: false , key: "fifth", page: 3 },
根据这些数据,首先我需要找到事件状态为 true 的数据,然后我需要创建一个包含具有相同页码的子数组的新数组。我需要这样的东西。
[
["first", "second"],
["third", "fourth"],
["fifth"]
]
我尝试过的是:
let myArray = Object.entries(dashboardKeyConfiguration).filter(x => x[1]["active"]);
var groups = [];
for (var i = 0; i < myArray.length; i++) {
var groupName = myArray[i][1]["page"];
if (!groups[groupName]) {
groups[groupName] = [];
}
groups[groupName].push(myArray[i][1]["key"]);
}
myArray = [];
console.log(groups);
它插入空作为第一项,如下所示:
(3) [empty, Array(2), Array(2)]
最佳答案
我们可以定义我们可以拥有的pageLength
最大页数。然后我们可以从 i 循环到 pageLength 并搜索该页面的对象并将其插入临时数组中。一旦特定页面的循环完成,就会将临时数组
推送到主数组
const obj = {
a : { active: true, key: "first", page: 1 },
b : { active: true, key: "second", page: 1 },
c : { active: true, key: "third", page: 2 },
d : { active: true , key: "fourth", page: 2 },
e : { active: false , key: "fifth", page: 3 },
}
let pageLength = 3;
let array = [] ;
for(let i = 1;i<=pageLength;i++){
temp = [];
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
let value = obj[key].key;
let page = obj[key].page;
if(page == i){
temp.push(value);
}
}
}
array.push(temp)
}
console.log(array)
这只是一个原始逻辑。请记住,此操作的复杂性可能很高,您可以用更好的方式来完成。
关于javascript - 如何根据共同值对数组进行分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55134205/