javascript - 程序不在 JavaScript 中枚举
问题描述
我正在尝试编写一个程序,该程序接受输入(图书馆,作者姓名)并返回作者所写书籍的标题。
图书馆看起来像这样:
let library = [
{ author: 'Bill Gates', title: 'The Road Ahead', libraryID: 1254 },
{ author: 'Carolann Camilo', title: 'Eyewitness', libraryID: 32456 },
{ author: 'Carolann Camilo', title: 'Cocky Marine', libraryID: 32457 }
];
我的代码如下所示:
let library = [
{ author: 'Bill Gates', title: 'The Road Ahead', libraryID: 1254 },
{ author: 'Carolann Camilo', title: 'Eyewitness', libraryID: 32456 },
{ author: 'Carolann Camilo', title: 'Cocky Marine', libraryID: 32457 }
];
function searchBooks(library, author) {
for (author in library) { //enumerate
if (author in library) {
let line = Object.values(library[0]) // find line of the wanted author
let result = (line[0] + "," + line[1]) // store author name and title name
return result
} else {
return "NOT FOUND"
}
}
}
console.log(searchBooks(library, 'Bill Gates'))
输出如下所示:
Bill Gates,The Road Ahead
问题:无论我输入什么作者,它searchBook
都会返回比尔盖茨,图书馆的第一行。因此,我猜它没有列举。但为什么不呢?
我首先想到也许我必须避免硬编码 [0] 和 [1] 而是使用 i 和 i++。但这似乎也不起作用,因为它随后输出TypeError: Cannot convert undefined or null to object
解决方案
一些东西:
for (author in library)
正在查找库数组的每个键,而不是使用of
which 评估每个值。因为它是一个对象,所以我命名了那个值book
- 您
result
可能有很多值,因此最好将其设为某种数组或集合,您可以将响应堆叠在 if (author in library)
检查您的作者是否是原始库数组中的键,这也是不希望的。你真的想看看是否author
是对象的值。更具体地说,您希望您的作者是对象作者键的值。所以book.author == author
- 你的结果是一个数组,所以用换行符加入这些值;如果结果数组中没有项目,它将是一个空字符串,这是一个错误值。在这种情况下,您可以回复您的
NOT FOUND
信息。否则你想归还所有的书
let library = [
{ author: 'Bill Gates', title: 'The Road Ahead', libraryID: 1254 },
{ author: 'Carolann Camilo', title: 'Eyewitness', libraryID: 32456 },
{ author: 'Carolann Camilo', title: 'Cocky Marine', libraryID: 32457 }
];
function searchBooks(library, author) {
let result = []
for (let book of library) {
if (book.author == author) {
let line = Object.values(book) // find line of the wanted author
result.push(line[0] + "," + line[1]) // store author name and title name
}
}
return result.join('\n') || 'NOT FOUND'
}
console.log(1, searchBooks(library, 'Carolann Camilo'))
console.log(2, searchBooks(library, 'Bill Gates'))
console.log(3, searchBooks(library, 'Oh boy'))
笔记:
推荐阅读
- reactjs - 未处理的 JS 异常:getPropertyAsObject:属性 '__fbRequireBatchedBridge'
- r - 修复自动格式化数据的 R 函数
- android - 无法在底部导航视图中显示菜单
- javascript - Javascript检查字符串是否存在于对象数组中
- node.js - 在 api 端点返回响应之前未及时创建构造函数上的值
- typescript - 浏览器中的 SheetJS (js-xlsx):从 Blob 中读取工作簿
- typescript - TypeScript:强制字符串文字类型只有一个值
- java - 模拟 Spring Security 类
- sql - 选择在 TSQL 中平衡的特定列中具有标签的数据子集
- optimization - 如何为集合中的每个元素设置上限和下限?