你们能给我一些关于下一个任务的例子或链接:
Fragment fragment = SearchActivity.newInstance(context);
String tag = fragment.toString();
getFragmentManager().beginTransaction()
.addToBackStack(tag)
.replace(R.id.fragment, new SearchActivity())
.commit();
在
var companies = [{
members: [{
name: 'John'
},
{
name: 'Victor'
},
{
name: 'Roan'
}
]
},
{
members: [{
name: 'John'
},
{
name: 'Roan'
}
]
}
]
当我输入“John and Victor”时 - 我希望得到公司[0]对象
当我输入“John而不是Victor”时 - 我希望得到公司[1]对象
QUESTION是如何解析文本并使其理解AND和NOT的位置? 希望我解释得很好。 提前谢谢你,祝你有愉快的一天!
答案 0 :(得分:1)
这是精细名称而非名称的功能。您可以自己过滤数组。
function searchCompanies(text) {
var nameand = [],
namesNot = [];
text = text.replace(/\s\s+/g, ' '); //remove multiple whitespace
var words = text.split(' ');
for (var i = 0; i < words.length; i++) {
var word = words[i].toLowerCase();
if (i == 0)
text.push(words[i]);
else if (word != 'and' && word != 'not') {
if (words[i - 1].toLowerCase() != 'not')
text.push(words[i]);
else
namesNot.push(words[i]);
}
}
}
答案 1 :(得分:0)
您想要解析文本并根据它运行代码。这可能会变得棘手,因此我们的目标是将系统规则缩小到尽可能简单。
在这种情况下,一个问题是我们需要将名称与and
或not
等关键字区分开来。我们可以维护一个像const keywords = ['and', 'not']
这样的列表,并将那个不在该列表中的任何内容视为名称。区分大小写怎么样? And
应该被视为名称,因为它是大写的吗?资本化是区分名字和非名字的便捷方式。
这只是冰山一角。
但是,好吧,让我们假设问题就像说明的那样简单。我们只想达到最低限度的目标。我将假设应包含所有名称,not
是唯一真正有意义的关键字。我将排除所有以not
开头的名称。
// Extremely naive, not suitable for production. Will get
// tricked by whitespace and other simple things.
const isName = (str) => {
return str[0] === str[0].toUpperCase();
};
const input = document.querySelector('input[type="text"]');
input.addEventListener('change', (evt) => {
const tokens = evt.target.value.split(' ');
const names = tokens.filter((name, i, arr) => {
return isName(name) && arr[i - 1] !== 'not';
});
const company = {
members : names.map((name) => {
return { name };
})
};
});