我有一个数组:
[
{
"website": "www.aaa.aaa",
"score": 90,
"tags": [ "Video Online"]
},
{
"website": "www.bbb.bbb",
"score": 90,
"tags": ["Streaming Video"]
},
{
"website": "www.ccc.ccc",
"score": 90,
"tags": ["Video"]
}
]
我希望过滤器标签带有'Video',用于此阵列。过滤后使用关键字“视频”。我希望结果所有对象'标签'都包含javascript ES5或ES6的'视频'。
我写了下面的代码,但它只使用args ==数组的值:
transform(val, args) {
//console.log(args[0]);
if(typeof args[0] === 'undefined') {
return val;
}
return val.filter((el) => {
//console.log(el.tags);
return el.tags.indexOf(args[0]) != -1; // return array[2]
});
}
答案 0 :(得分:2)
基本上你想要制作一个自定义匹配功能。你似乎在功能上编程,这很酷 - 它很适合这种问题。我已经添加了一些建议,以使其更加强大。
我之前从未见过CrWinDefRet
的简写,所以我认为这实际上是一件事!
确保您正在搜索相同的案例。如果您的搜索字符串全部为大写字母且标签不是,则它们将不匹配。
有一个((elem) => { func })
方法,如果一个或多个迭代元素符合某些条件,则返回true:这是我们想要看到的任何关键字匹配的东西。
您希望按空格字符进一步拆分所有代码,以便视频'将返回所有带有'视频'或者,您可以将每个单词作为单独的标记(例如[" Streaming"," Video"])
这就是您的转换功能将这些建议考虑在内的原因:
.some

答案 1 :(得分:0)
现在我明白了。您想传递一组值,如果任何标记属性包含任何值,则返回该对象,所以:
var array = [{"website": "www.aaa.aaa","score": 90,"tags": [ "Video Online"]},
{"website": "www.bbb.bbb","score": 90,"tags": ["Streaming Video"]},
{"website": "www.ccc.ccc","score": 90,"tags": ["Video"]}];
function transform(val, args) {
if(typeof args[0] === 'undefined') {
return val;
}
// Get the members of val whose tags property has
// any of the values in args
return val.filter(function(el) {
// Returns true for the first match, otherwise false
return args.some(function(s){return el.tags.indexOf(s) != -1});
});
}
document.write(JSON.stringify(transform(array, ['Video','Video Online'])));

或者如果你想使用箭头功能:
function transform(val, args) {
if(typeof args[0] !== 'undefined')
return val.filter(el => args.some(s => el.tags.indexOf(s) != -1));
}