在查找数据中搜索元素数组
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
数组中不存在的某些书籍的值,您可以使用 filter
和 some
函数
var newbooks = someBooks.filter(value => {
return lookups.Data.some(data => data.BookName === value)
})
我在 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
数组中不存在的某些书籍的值,您可以使用 filter
和 some
函数
var newbooks = someBooks.filter(value => {
return lookups.Data.some(data => data.BookName === value)
})