我有如下数据结构:
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)]
这是因为page
从1
开始只是从1
减去groupName
let obj = { a : { active: true, key: "first", page: 1 }, b : { active: true, key: "second", page: 1 }, c : { active: false, key: "third", page: 2 }, d : { active: false , key: "fourth", page: 2 }, e : { active: true , key: "fifth", page: 3 }}
let myArray = Object.entries(obj).filter(x => x[1]["active"]);
var groups = [];
for (var i = 0; i < myArray.length; i++) {
var groupName = myArray[i][1]["page"]-1;
if (!groups[groupName]) {
groups[groupName] = [];
}
groups[groupName].push(myArray[i][1]["key"]);
}
groups = groups.filter(x => x !== undefined)
console.log(groups)
我们可以定义pageLength
我们可以拥有的最大页数。然后我们可以从i循环到pageLength
并在对象中搜索页面并将其推入临时数组中。一旦特定页面的循环完成,请在主array
中推送临时array
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)
这只是一个原始逻辑。请记住,此复杂性可能很高,您可以更好地完成此操作。
Object.values(Object.keys(obj).reduce((acc,key)=>{
if(obj[key].active) {if(acc[obj[key].page]) {acc[obj[key].page].push(obj[key].key)} else {acc[obj[key].page] = [obj[key].key]}}
return acc
},{}))
我们可以减少对象的“活动键为真”的对象条目
Object.keys(obj).reduce((acc,key)=>{
if(obj[key].active) {if(acc[obj[key].page]) {acc[obj[key].page].push(obj[key].key)} else {acc[obj[key].page] = [obj[key].key]}}
return acc
},{})
output:
{
1:["first","second"],
3:["fifth"]
}
我们可以从这个对象中获取值
[["first","second"],["fifth"]]
有关更多信息https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce