我一直在帮助朋友改进他的代码以使用搜索结果创建记录,但是它不是创建记录数组而是返回最后的结果。如何创建一系列记录?即搜索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));
答案 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)
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);
}