首页 > 解决方案 > Javascript 过滤器功能无法正常工作

问题描述

我有一个包含两个信号的对象。(2)(2) Sheet1_TrainID(2)(2) Sheet1_Traintype。现在用户可能想查看 trainID 或 Traintype。因此我实现了这个功能:

我的对象看起来像这样:

var myarray = [{
  "captions": [
    {
      "name": "(2)(2) Sheet1_TrainID",
      "attributes": {},
      "filter": true,
      "sort": true
    },
    {
      "name": "(2)(2) Sheet1_Traintype",
      "attributes": {},
      "filter": true,
      "sort": true
    }
  ],
  "rows": [
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1002,
          "hiddenValue": 1002,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1002,
          "hiddenValue": 1002,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    }
  ],
  "direction": "vertical",
  "attributes": {},
  "clickable": false
}]

我的功能如下所示:

   function myfilter (value) {
        var afterfilter = myarray.filter(data=>{
      console.log(data)
        return data['rows'].filter(cells=>{ 
            return cells['cells'].filter(d=>{       
            return cells.toString().toLowerCase().includes("trainid".toLowerCase())             
          })
        })
      })
      console.log(afterfilter)
    }

myfilter()

现在我如何修改我的函数,以便它可以进行部分搜索并找到标题和行的相应对象。

所以过滤对象后,我应该只包含数据, (2)(2) Sheet1_TrainID而 myarray 应该如下所示:

var myarray = [{
  "captions": [
    {
      "name": "(2)(2) Sheet1_TrainID",
      "attributes": {},
      "filter": true,
      "sort": true
    }],
    "rows": [{
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        } ]
    }, and so on

因此该数组将不包含任何与(2)(2) Sheet1_Traintype

我如何修改功能来实现这一点。

var myarray = [{
  "captions": [
    {
      "name": "(2)(2) Sheet1_TrainID",
      "attributes": {},
      "filter": true,
      "sort": true
    },
    {
      "name": "(2)(2) Sheet1_Traintype",
      "attributes": {},
      "filter": true,
      "sort": true
    }
  ],
  "rows": [
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1002,
          "hiddenValue": 1002,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1002,
          "hiddenValue": 1002,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    }
  ],
  "direction": "vertical",
  "attributes": {},
  "clickable": false
}]



function myfilter (value) {
	var afterfilter = myarray.filter(data=>{
  console.log(data)
  	return data['rows'].filter(cells=>{ 
    	return cells['cells'].filter(d=>{       
      	return cells.toString().toLowerCase().includes("id".toLowerCase())         	
      })
    })
  })
  console.log(afterfilter)
}

myfilter()

标签: javascript

解决方案


您将不得不单独处理它们...

这是可行的。

var myarray = [{
  "captions": [
    {
      "name": "(2)(2) Sheet1_TrainID",
      "attributes": {},
      "filter": true,
      "sort": true
    },
    {
      "name": "(2)(2) Sheet1_Traintype",
      "attributes": {},
      "filter": true,
      "sort": true
    }
  ],
  "rows": [
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1002,
          "hiddenValue": 1002,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1002,
          "hiddenValue": 1002,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "ICE",
          "hiddenValue": "ICE",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    },
    {
      "cells": [
        {
          "value": 1000,
          "hiddenValue": 1000,
          "type": "data",
          "columnName": "(2)(2) Sheet1_TrainID"
        },
        {
          "value": "IC",
          "hiddenValue": "IC",
          "type": "data",
          "columnName": "(2)(2) Sheet1_Traintype"
        }
      ]
    }
  ],
  "direction": "vertical",
  "attributes": {},
  "clickable": false
}]




function myfilter (value) {
	return value.map(obj => {
    return {captions: (obj.captions.filter(c => c.name.toString().toLowerCase().includes("id".toLowerCase()))), rows: obj.rows.map(row => {
      return {cells:row.cells.filter(c => c.columnName.toString().toLowerCase().includes("id".toLowerCase()))}
    })}
  })
}

console.log(myfilter(myarray))


推荐阅读