[英]Iterating and filtering with ES6/lodash
我們有一系列對象,如:
const persons = [{
name: "john",
age: 23
}, {
name: "lisa",
age: 43
}, {
name: "jim",
age: 101
}, {
name: "bob",
age: 67
}];
以及對象中對象的屬性值數組
const names = ["lisa", "bob"]
我們如何使用es6在names數組中找到名字的人,如:
const filteredPersons = [{
name: "lisa",
age: 43
}, {
name: "bob",
age: 67
}];
ES6
使用帶謂詞的filter
函數,並在其中檢查names
數組中是否存在names
。
const persons = [ {name: "john", age:23}, {name: "lisa", age:43}, {name: "jim", age:101}, {name: "bob", age:67} ]; const names = ["lisa", "bob"]; const filtered = persons.filter(person => names.includes(person.name)); console.log(filtered);
您可以使用filter()
和inlcudes()
來獲取所需的結果。
DEMO
const persons = [{ name: "john", age: 23 }, { name: "lisa", age: 43 }, { name: "jim", age: 101 }, { name: "bob", age: 67 }]; const names = ["lisa", "bob"]; console.log(persons.filter(({ name }) => names.includes(name)))
.as-console-wrapper { max-height: 100% !important; top: 0; }
我建議使用indexOf
因為includes
在IE瀏覽器中不起作用。 此外,使用{name}
作為Destructuring賦值,它將保存對象的name
屬性的值。
const persons = [{ name: "john", age: 23 }, { name: "lisa", age: 43 }, { name: "jim", age: 101 }, { name: "bob", age: 67 }]; const names = ["lisa", "bob"]; console.log(persons.filter(({name}) => names.indexOf(name) !== -1))
lodash
你可以嘗試以下
const persons = [{name: "john", age: 23}, {name: "lisa",age: 43}, {name: "jim", age: 101}, {name: "bob",age: 67}]; const names = ["lisa", "bob"] const filteredPersons = _.filter(persons, function(person) { return _.indexOf(names, person.name) !== -1; }); console.log(filteredPersons);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.10.1/lodash.js"></script>
如果你想在執行它n
復雜,這里是一個辦法做到這一點:
這是一個有效的演示:
const persons = [{ name: "john", age: 23 }, { name: "lisa", age: 43 }, { name: "jim", age: 101 }, { name: "bob", age: 67 }]; const names = ["lisa", "bob"]; const map = persons.reduce((acc, item) => { acc[item.name] = item; return acc; }, {}); const result = names.map(name => map[name]); console.log(result);
注意:此解決方案假定源數組中只有唯一的人名。 需要調整它來處理重復項。
有關詳細信息,請參閱Closures
, Set
和Array.prototype.filter()
。
// Input. const persons = [{name: "john",age: 23}, {name: "lisa",age: 43}, {name: "jim",age: 101}, {name: "bob",age: 67}] const names = ["lisa", "bob"] // Filter. const filter = (A, B) => (s => A.filter(x => s.has(x.name)))(new Set(B)) // Output. const output = filter(persons, names) // Proof. console.log(output)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.