从嵌套函数转换为链接函数

时间:2019-08-27 17:11:39

标签: javascript refactoring

我正在尝试将我编写的这段代码转换为链接函数,因为我认为它看起来更干净。

let z =this.parkinglot.filter(val=>{
           let propArr =  Object.entries(val.spaces);
           let pass = propArr.some(w=>{
                let [key,value] = w;
                return (value > 0);
                })   
            return (pass===true); 
          })

我的数据结构是一个看起来像这样的对象数组(存储在名为this.parkinglot的数组中) enter image description here

当我尝试将其重写为链接函数时,遇到了向函数提供正确输入的问题。由于我需要内部数据,因此需要使用地图,但是现在有了3层阵列。

然后我遇到了一个问题,我该如何将该数据正确过滤。

let t = this.parkinglot.map(val => Object.entries(val.spaces))
  .some(w=>{
    console.log('aa',w);
      // let [key,value]=w
       //return (value > 0);
  })
  //.filter(z=>z>1)

1 个答案:

答案 0 :(得分:2)

最接近的链接是过滤器和一些过滤器。而且由于您只关心值,所以请使用Object.values而不是条目。

var data = [
  { level: 1, spaces : {a: 0, b:0, c: 0} },
  { level: 2, spaces : {a: 2, b:0, c: 0} },
  { level: 3, spaces : {a: 0, b:3, c: 0} },
  { level: 4, spaces : {a: 0, b:0, c: 10} },
  { level: 5, spaces : {a: 0, b:0, c: 0} },
]

const open = data.filter(level => Object.values(level.spaces).some(v => v))

console.log(open);

如果需要关卡,只需将map()添加到末尾

.filter(...).map(data => data.level)