javascript - 搜索对象并 .push 到新位置

标签 javascript jquery

我试图将句子从一个地方推到另一个地方。

这完全取决于找到了哪些关键字。如果一个句子有两个关键词,那么它会被推到第一个。

  • cat - 将所有包含 cat 的句子推送到 keywordsFound.cats
  • dog - 将所有包含 dog 的句子推送到 keywordsFound.dogs
  • hamst - 将所有包含 hamster 的句子推送到 keywordsFound.hamsters

var data = "I have an oriental cat. I have both a dog and a cat. I always takes care of my American shorthair cat. I have a Birman cat. My parents bought me two Golden Retriever dogs. My dog is a German Shepherd. I always wanted a hamster. I don't have a pet."

var userInput = {
  all: [
    "I have an oriental cat.",
    "I have both a dog and a cat.", //Should only push the first one - dog
    "I always take care of my American shorthair cat.",
    "I have a Birman cat.",
    "My parents bought me two Golden Retriever dogs.",
    "My dog is a German Shepherd.",
    "I always wanted a hamster.",
    "I don't have a pet."
  ],
  keywordsFound: {
    cats: [/*Push all sentences with cat here*/],
    dogs: [/*Push all sentences with dog here*/],
    hamsters: [/*Push all sentences with hamster here*/]
  },
  noKeywordsFound: [],
}

function search(term) {
  if (userInput.all.indexOf(term) !== -1) {
    if (term == 'cat') {
     }
    if (term == 'dog') {
     }
    if (term == 'hamster') {
    }

  } 
  else {
    //Push to noKeywordsFound as an array
  }
}

//Which ever comes first gets pushed
search('cat')
search('dog') //Contains
search('hamster') //Contains

最佳答案

好的,所以您使用 indexOf 是在正确的轨道上但是你在错误的地方使用了它(userInput.all.indexOf(term)) :)

所以你应该在 search() 函数中做的是:

1) 遍历 userInput.all 的每个元素 - 您可以执行常规的 for 循环或使用 Array.prototype.reduce()得到所有匹配的句子。

2) 现在在循环中使用 indexOf在每个元素上检查它是否包含搜索词

3) 如果找到术语,则插入所需的集合

所以我会像这样稍微更改您的代码:

var userInput = {
  all: [
    "I have an oriental cat.",
    "I have both a dog and a cat.", //Should only push the first one - dog
    "I always take care of my American shorthair cat.",
    "I have a Birman cat.",
    "My parents bought me two Golden Retriever dogs.",
    "My dog is a German Shepherd.",
    "I always wanted a hamster.",
    "I don't have a pet."
  ],
  keywordsFound: {
    cats: [],
    dogs: [],
    hamsters: []
  },
  noKeywordsFound: [],
}

function search(term) {
  
  // Here you can do a basic for loop, but I'm using reduce function
  var foundItems = null;
  foundItems = userInput.all.reduce(function(found, current){
    if(~current.indexOf(term)){
      found.push(current);
    }
    return found;
  }, []);
  
  switch(term){
    case 'cat':{
      userInput.keywordsFound.cats = foundItems;
    }break;
    
    case 'dog':{
      userInput.keywordsFound.dogs = foundItems;
    }break;
    
    case 'hamster':{
      userInput.keywordsFound.hamsters = foundItems;
    }break;
  }

}

search('cat');
console.log('sentence with cats')
console.log(userInput.keywordsFound.cats);
search('dog'); 
console.log('sentence with dogs')
console.log(userInput.keywordsFound.dogs);
search('hamster'); 
console.log('sentence with hamsters')
console.log(userInput.keywordsFound.hamsters);

关于javascript - 搜索对象并 .push 到新位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432223/

相关文章:

javascript - 输入框里的日历

php - 为 PDF 动态创建 map

javascript - jQuery - 鼠标输入闪烁图像

javascript - 如何为右侧的文本设置动画

javascript - Microsoft Azure ROPC Flow 400 错误请求

javascript - Jasmine 和expect有什么区别吗?

javascript - 使用 setPosition 更改位置时 Google 标记消失

javascript - 如何在 Google Analytics API 中过滤自定义分割

javascript - 当我想覆盖之前的push()条目时,AngularJS使用push()问题

javascript - jqueryui 可拖动移动图像与处理程序