Javascript 搜索对象并将其推送到新位置
我试着把句子从一个地方推到另一个地方 这完全取决于找到了哪些关键字。如果一个句子有两个关键字,那么它会被推到第一个关键字Javascript 搜索对象并将其推送到新位置,javascript,jquery,Javascript,Jquery,我试着把句子从一个地方推到另一个地方 这完全取决于找到了哪些关键字。如果一个句子有两个关键字,那么它会被推到第一个关键字 cat-将包含cat的所有句子推送到关键字found.cats 狗-将所有包含狗的句子推送到关键字found.dogs 仓鼠-将包含仓鼠的所有句子推送到关键字found.hambers var data=“我有一只东方猫。我有一只狗和一只猫。我总是照顾我的美国短毛猫。我有一只伯曼猫。我父母给我买了两只金猎犬。我的狗是德国牧羊犬。我一直想要一只仓鼠。我没有宠物。” var
- cat-将包含cat的所有句子推送到关键字found.cats
- 狗-将所有包含狗的句子推送到关键字found.dogs
- 仓鼠-将包含仓鼠的所有句子推送到关键字found.hambers
var data=“我有一只东方猫。我有一只狗和一只猫。我总是照顾我的美国短毛猫。我有一只伯曼猫。我父母给我买了两只金猎犬。我的狗是德国牧羊犬。我一直想要一只仓鼠。我没有宠物。”
var userInput={
全部:[
“我有一只东方猫。”,
“我有一只狗和一只猫。”,//应该只推第一只狗
“我总是照顾我的美国短毛猫。”,
“我有一只伯曼猫。”,
“我父母给我买了两只金毛猎犬。”,
“我的狗是德国牧羊犬。”,
“我一直想要一只仓鼠。”,
“我没有宠物。”
],
关键词基金:{
猫:[/*在这里用猫推送所有句子*/],
狗:[/*在这里用狗推送所有句子*/],
仓鼠:[/*在此处推送所有与仓鼠有关的句子*/]
},
NoKeywords查找:[],
}
函数搜索(术语){
if(userInput.all.indexOf(term)!=-1){
如果(术语=='cat'){
}
如果(术语==‘狗’){
}
如果(术语==‘仓鼠’){
}
}
否则{
//Push to NoKeywords作为数组查找
}
}
//谁先到谁就被推
搜索('cat')
搜索('dog')//包含
search('仓鼠')//包含
好的,因此您使用的是正确的,但使用的位置不正确(userInput.all.indexOf(term)
):)
因此,您应该在search()
函数中执行以下操作:
1) 循环检查userInput的每个元素。all
-您可以对循环执行常规的,或使用以获取所有匹配的句子
2) 现在,在循环内部,对每个元素使用,检查它是否包含搜索项
3) 如果找到术语,则插入所需集合
因此,我将稍微更改您的代码,如下所示:
var userInput={
全部:[
“我有一只东方猫。”,
“我有一只狗和一只猫。”,//应该只推第一只狗
“我总是照顾我的美国短毛猫。”,
“我有一只伯曼猫。”,
“我父母给我买了两只金毛猎犬。”,
“我的狗是德国牧羊犬。”,
“我一直想要一只仓鼠。”,
“我没有宠物。”
],
关键词基金:{
猫:[],
狗:[],
仓鼠:[]
},
NoKeywords查找:[],
}
函数搜索(术语){
//这里你们可以做一个基本的for循环,但我使用的是reduce函数
var foundItems=null;
foundItems=userInput.all.reduce(函数(已找到,当前){
if(~current.indexOf(term)){
发现。推送(电流);
}
发现退货;
}, []);
开关(术语){
“猫”一案:{
userInput.keywordsFound.cats=foundItems;
}中断;
“狗”案:{
userInput.keywordsFound.dogs=foundItems;
}中断;
“仓鼠”一案:{
userInput.keywordsFound.仓鼠=foundItems;
}中断;
}
}
搜索(“猫”);
console.log(‘带猫的句子’)
log(userInput.keywordsFound.cats);
搜查(“狗”);
console.log(‘带狗的句子’)
log(userInput.keywordsFound.dogs);
搜索(“仓鼠”);
console.log(‘带仓鼠的句子’)
log(userInput.keywordsFound.仓鼠)
尝试使用ES6箭头函数、和数组函数,并确定要推送的正确键
变量:userInput.keywordsFound[key].push(str)
代码:
const userInput={
所有人:[“我有一只东方猫”,“我有一只狗和一只猫”,“我总是照顾我的美国短毛猫”,“我有一只伯曼猫”,“我父母给我买了两只金猎犬”,“我的狗是德国牧羊犬”,“我一直想要一只仓鼠”,“我没有宠物”],
关键词基金:{
猫:[],
狗:[],
仓鼠:[]
},
NoKeywords查找:[],
},
搜索=术语=>{
userInput.all.forEach(str=>{
const key=Object.keys(userInput.keywordsFound.find)(k=>k.includes(term));
key&&str.includes(term)&&userInput.keywordsFound[key].push(str);
});
};
//谁先到谁就被推
搜索(“猫”);
搜查(“狗”)//包含狗
搜查(“火腿”)//包含仓鼠
log(userInput.keywordsFound)
您正在调用search('仓鼠')
,同时在search
函数中查找if(term=='仓鼠'){
。你必须纠正测试或调用,使其正常工作。要改进代码,请使用开关,而不是几个if
。这对阅读和性能都有好处。无论仓鼠搜索文本如何,代码都不会正常工作……我对编码是新手,我正在尝试一步一步地找出它。我将研究开关是什么…我仍然是这方面的初学者。问题还不是很清楚。为什么你首先需要这样一个不规则的结构?为什么你要变异userInput
?@YuryTarabanko我用JavaScript开关盒更新了iTunes,以获取基于最终用户输入的搜索输入术语
的逻辑。不要认为这是个好主意因为您可以通过Object.keys(userInput.keywordsFound.find)(k=>k.includes(term))动态地获得它
检查我的回答是的,如果输入数据来自用户,使用开关并不是最好的选择,但它在这个特定的用例中会起作用。感谢您指出这一点。无论如何,您的解决方案就在那里,如果有人需要,可以使用它。