我在JavaScript中有一个可观察的数组,
lookups.Data
[...]
__proto__: []
length: 2884
[0]: {...}
[1]: {...}
[2]: {...}
[3]: {...}
[4]: {...}
[5]: {...}
[6]: {...}
[7]: {...}
[8]: {...}
[9]: {...}
[10]: {...}
每个记录都像,
lookups.Data[0]
{...}
__proto__: {...}
BookName: "Silapathikaram"
Author: "Illangovadigal"
type: "Tamil"
我有一个 someBooks
值的数组,
someBooks = ["ABC", "CED", "Silapathikaram"]
现在,我需要从不在查找数据中的某些书籍中删除书籍。
如果它是一个数组,并且我可以使用indexof,
lookup.indexOf(book) == -1 // to check the existance of the book in the lookup
谁能建议我有任何有效或简单的方法可以做到这一点?任何帮助都将非常有用。
最有效的方法是使用集合。构建一组所有书籍名称,并找到名称和someBooks
的交集。
let allNames = new Set(lookups.Data.map(e => e.BookName)),
someBooks = new Set(["ABC", "CED", "Silapathikaram"]);
let intersection = new Set();
for (var elem of allNames) {
if (someBooks.has(elem)) {
intersection.add(elem);
}
}
在整个书籍名称列表中多次执行.includes
会很慢,效率低下,而使用集合不应该存在此问题,但最终取决于浏览器的实现。
您可以尝试数组#filter 函数,在条件 array#include#include 函数中。
const someBooks = ['A', 'B', 'C'];
const lookup = ['A', 'C'];
const filteredBooks = someBooks.filter(book => lookup.includes(book));
console.log(filteredBooks);
为了从lookups.Data
数组中不存在的某些书籍过滤值,您可以使用filter
和some
功能
var newbooks = someBooks.filter(value => {
return lookups.Data.some(data => data.BookName === value)
})