Javascript 在查找数据中搜索元素数组

Javascript 在查找数据中搜索元素数组,javascript,arrays,indexof,Javascript,Arrays,Indexof,我有一个javascript中的可观察数组 lookups.Data [...] __proto__: [] length: 2884 [0]: {...} [1]: {...} [2]: {...} [3]: {...} [4]: {...} [5]: {...} [6]: {...} [7]: {...} [8]: {...} [9]: {...} [10]: {...} 每一张唱片都像

我有一个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
value数组

someBooks = ["ABC", "CED", "Silapathikaram"]
现在我需要从一些不在查找数据中的图书中删除图书

如果它是单个数组,并且是单个项,我可以使用indexof

lookup.indexOf(book) == -1 // to check the existance of the book in the lookup
有人能告诉我有没有什么有效或简单的方法可以做到这一点?任何帮助都是非常有用的

您可以在条件函数中尝试函数和

constsomebooks=['A','B','C'];
常量查找=['A','C'];
const filteredBooks=someBooks.filter(book=>lookup.includes(book));

console.log(filteredbook)最有效的方法是使用集合。构建一组所有书籍名称,并找到名称与
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
,速度会很慢,效率也会很低,而使用集合不应该有这个问题,但最终取决于浏览器的实现。

为了从
查找.Data
数组中不存在的某些书籍中筛选值,您可以使用
过滤器
和函数


你的somebook格式不正确。当你说observable array时,你是在说Knockout的observable array吗?不确定我们是否需要涵盖observable array部分。@Rajesh耐心点,下面就是一个例子。
var newbooks = someBooks.filter(value => {
    return lookups.Data.some(data => data.BookName === value)
})