Javascript 在查找数据中搜索元素数组
我有一个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]: {...} 每一张唱片都像
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)
})