从搜索结果创建记录数组

时间:2011-11-05 15:58:42

标签: javascript

我一直在帮助朋友改进他的代码以使用搜索结果创建记录,但是它不是创建记录数组而是返回最后的结果。如何创建一系列记录?即搜索in将创建一条记录:

title:继承:继承周期,第4册 得分:2

标题:结局的意义 得分:1

books = [
  {
    title: "Inheritance: Inheritance Cycle, Book 4",
    author: "Christopher Paolini",
  },
  {
    title: "The Sense of an Ending",
    author: "Julian Barnes"
  },
  {
    title: "Snuff Discworld Novel 39",
    author: "Sir Terry Pratchett",
  }
]
search = prompt("Title?");

function count(books, pattern) {
  var result = [];
  var record = {};
  for (i = 0; i < books.length; i++) {
    var index = -1;
    result[i] = 0;
    do {
      index = books[i].title.toLowerCase().indexOf(pattern.toLowerCase(), index + 1);
      if (index >= 0) {
        result[i] = result[i] + 1;
        record.title = books[i].title;
        record.score = result[i];
      }
    } while (index >= 0)
  }
  return record.title + " " + record.score;
}
alert(count(books, search));

2 个答案:

答案 0 :(得分:1)

你应该返回result数组,在循环内构造record,初始分数为0,当在内循环中找到匹配时,增加分数(而不是结果),并且仅当分数不为零时才将record插入result数组:

function count(books, pattern) {
   var result = [];
   for (i = 0; i < books.length; i++) {
     var record = {title: books[i].title, score: 0};
     var index = -1;
     do {
       index = books[i].title.toLowerCase().indexOf(pattern.toLowerCase(), index + 1);
       if (index >= 0) {
         record.score = record.score + 1
       }
    } while (index >= 0)
    if (record.score > 0) {
       result.push(record);
    }    
  }
  return result;
}

答案 1 :(得分:1)

http://jsfiddle.net/Hk7mU/

books = [
   {
     title: "Inheritance: Inheritance Cycle, Book 4",
     author: "Christopher Paolini",
   },
   {
     title: "The Sense of an Ending",
     author: "Julian Barnes"
   },
   {
     title: "Snuff Discworld Novel 39",
     author: "Sir Terry Pratchett",
   }
 ]



 function count(books, pattern) {
   var results = [];
   for (var i = 0; i < books.length; i++) {
     var index   = -1;
     // create a record with zero score
     var record  = {title: books[i].title, score: 0};
     do {
       index = books[i].title.toLowerCase().indexOf(pattern.toLowerCase(), index + 1);
       if (index >= 0) {
         // increase score
         record.score++;
       }
     } while (index >= 0)

     // only add to results if score is greater than zero
     if(record.score > 0) {
       results.push(record);
     }
   }
   // return all results
   // an array containing records
   return results;
 }

  search = prompt("Title?");
  var searchResults = count(books, search);
  // loop through result and alert
  for(var i=0;i<searchResults.length;i++) {
    alert("Title: " + searchResults[i].title + " Score:" + searchResults[i].score);
  }