Lodash获取所有有关键的对象
我正在寻找有关键的过滤对象
这是我的对象
var mydevices= { "Object1": { "name": "name1", "category": "laptop" }, "Object2": { "name": "name2", "category": "laptop" }, "Object3": { "name": "name3", "category": "Desktop" }, "Object4": { "name": "name4", "category": "Mobile" } }
和我的filter键是arrays
var filterKeyArray=["Mobile","laptop"]
我想从每个对象的类别应用filter。
所以filter将返回从filterKeyArray有一个键的对象。
build议一些帮助。
使用lodash,可以使用pickBy
从对象中select属性,并使用includes
函数来过滤不在数组中的值。 这将创build新的对象,不会更改原始对象。
var mydevices = {"Object1":{"name":"name1","category":"laptop"},"Object2":{"name":"name2","category":"laptop"},"Object3":{"name":"name3","category":"Desktop"},"Object4":{"name":"name4","category":"Mobile"}} var filterKeyArray=["Mobile","laptop"] var result = _.pickBy(mydevices, e => _.includes(filterKeyArray, e.category)) console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
使用Object.keys()
和Array#map
迭代mydevices
属性,并检查指定的元素是否具有filterKeyArray
数组中提到的category
值。
ES6解决scheme,不需要lodash
。
var mydevices = {Object1:{name:"name1",category:"laptop"},Object2:{name:"name2",category:"laptop"},Object3:{name:"name3",category:"Desktop"},Object4:{name:"name4",category:"Mobile"}}, filterKeyArray = ["Mobile", "laptop"] Object.keys(mydevices).forEach(v => filterKeyArray.some(c => c == mydevices[v].category) ? null : delete mydevices[v]); console.log(mydevices);