JavaScript array.filter()和迭代器

麦克风

得到了一个对象数组,需要按2个条件对其进行过滤。这些标准之一是向上计数的索引。

let data = 
[{"hour": 1, "dayIndex": 0, "value": "something"},
{"hour": 1, "dayIndex": 1, "value": "something"},
{"hour": 1, "dayIndex": 3, "value": "something"},
{"hour": 2, "dayIndex": 0, "value": "something"},
{"hour": 2, "dayIndex": 1, "value": "something"},
// and so on 
]

我需要一个由“小时”和“ dayIndex”过滤的对象数组,对于缺少的dayIndexes,创建一个空对象很重要。因此对于hour = 1,我将需要以下内容:

 let hourOneArray = 
 [
  {"hour" : 1, "dayIndex": 0, "value": "something"},
  {"hour" : 1, "dayIndex": 1, "value": "something"},
  {}, //empty because dayIndex 2 is missing
  {"hour" : 1, "dayIndex": 3, "value": "something"},
  {}, //empty because dayIndex 4 is missing
 ]

我的方法是:

   for(let i = 0; i < 4; ++i){
       hourOneArray = data.filter((arg) => {
           return ((arg.hour === 1) && (arg.dayIndex === i));
       })
   } 

提前致谢

埃迪·D

这是一个快速,干净的解决方案,可以按小时过滤所有内容,填补空白。利用地图并减少:D

let data = 
[{"hour": 1, "dayIndex": 0, "value": "something"},
{"hour": 1, "dayIndex": 1, "value": "something"},
{"hour": 1, "dayIndex": 3, "value": "something"},
{"hour": 2, "dayIndex": 0, "value": "something"},
{"hour": 2, "dayIndex": 1, "value": "something"},
// and so on 
]


let defaultArr = [];
data.forEach(val => defaultArr.push({}));


let output = data.reduce((hash, val) => {

  let hour = val.hour;
  let dayIndex = val.dayIndex;

  if(!hash[hour]) hash[hour] = defaultArr.map(val => val);
  hash[hour][dayIndex] = val;
  return hash;
}, {})
console.log(output);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章