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

Search an array of elements in the lookup data

我在 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 like,

lookup.indexOf(book) == -1 // to check the existance of the book in the lookup

任何人都可以建议我有什么有效或简单的方法来做到这一点吗?任何帮助都会非常有用。

您可以试试Array#filter function and in the condition Array#includes功能。

const someBooks = ['A', 'B', 'C'];
const lookup = ['A', 'C'];

const filteredBooks = someBooks.filter(book => lookup.includes(book));

console.log(filteredBooks);

最有效的方法是使用集合。构建所有书名的集合,并找到名称和 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会很慢且效率低下,而使用集合应该不会有这个问题,但最终还是要看浏览器的实现。

为了过滤 lookups.Data 数组中不存在的某些书籍的值,您可以使用 filtersome 函数

var newbooks = someBooks.filter(value => {
    return lookups.Data.some(data => data.BookName === value)
})