减少内部地图内部地图无效



我正试图针对一系列类别运行一系列关键字,然后在这些类别中有一些选项。所以我最终在reduce上做了一个map over map,当处理大量条目时,节点消耗了太多内存。

我明白了,它做什么并不是真正的问题,但如何让它不渴望如此多的记忆?

const keywords = [
{
Keyword: 'foo',
URL: 'https://www.facebook.co.uk'
},
{
Keyword: 'foo',
URL: 'https://www.twitter.co.uk/blue'
},
{
Keyword: 'faa',
URL: 'https://www.facebook.co.uk/twitter'
},
{
Keyword: 'faa',
URL: 'https://www.apple.co.uk/green'
}
]
const categories = [
{
name: 'Tech',
options: [
{
method: 'include',
regex: 'facebook'
},
{
method: 'exclude',
regex: 'twitter'
}
]
},
{
name: 'Green',
options: [
{
method: 'include',
regex: 'green'
}
]
}
]
const result = keywords.map((obj) => {
categories.map(({ name, options }) => {
const option = options.reduce((acc, { method, regex }) => {
acc.push(method === 'include' ? obj.URL.includes(regex) : !obj.URL.includes(regex))
return acc
}, [])
obj[name] = !option.includes(false)
})
return obj
})
console.log(result)
.as-console-wrapper { max-height: 100% !important; top: 0; }

您正在创建许多不需要的数组。

如果只关心option是否包含false(),则可以将reduce()调用替换为every()

categories.map()应该是categories.forEach(),因为您不使用生成的数组。

由于您正在修改obj并返回它,result数组中的对象将与keywords数组中的相同,因此也不需要在那里创建新的数组。所以你也可以使用forEach()

const keywords = [{
Keyword: 'foo',
URL: 'https://www.facebook.co.uk'
},
{
Keyword: 'foo',
URL: 'https://www.twitter.co.uk/blue'
},
{
Keyword: 'faa',
URL: 'https://www.facebook.co.uk/twitter'
},
{
Keyword: 'faa',
URL: 'https://www.apple.co.uk/green'
}
]
const categories = [{
name: 'Tech',
options: [{
method: 'include',
regex: 'facebook'
},
{
method: 'exclude',
regex: 'twitter'
}
]
},
{
name: 'Green',
options: [{
method: 'include',
regex: 'green'
}]
}
]
keywords.forEach((obj) =>
categories.forEach(({name, options}) => 
obj[name] = options.every(({method, regex}) => 
method === 'include' ? obj.URL.includes(regex) : !obj.URL.includes(regex))))
console.log(keywords)
.as-console-wrapper {
max-height: 100% !important;
top: 0;
}

最新更新