无法获得高阶功能而无法正常工作

时间:2019-11-26 16:14:08

标签: javascript find higher-order-functions

我是一个相当新的Webdev学生,我目前正在做一个练习,但是遇到了麻烦。我有一个包含对象的数组,目标是使用高阶函数对其进行操作。

let bookList = [
    {
    title:"The Way of Kings",
    author: "B Sanderson",
    pages: 900,
    isAvailable:false
    },
    {
    title:"Words of radiance",
    author: "B Sanderson",
    pages: 1087,
    isAvailable:true
    },  
    {
    title:"Oathbringer",
    author: "B Sanderson",
    pages: 1000,
    isAvailable:false
    }
];

为我提供了一些不允许更改的代码作为起点。我应该编写一个函数,如果我的bookList中存在确切的标题,则返回true。

function hasBook(title, bookShelf) {
}

到目前为止,这是我所掌握的,而且我不知道如何进一步发展。在这里我得到一个错误,说bookList不是一个函数,但是我不知道如何使它工作。我知道自己搞砸了,可能我还不太了解如何在默认代码中使用find。

function hasBook(title, bookShelf) {
    if (title === bookShelf.titel) {
         return true;
    }
}

bookList.find(hasBook("Oathbringer", bookList )); 

希望您能理解我的要求。

2 个答案:

答案 0 :(得分:1)

您可以使用some方法- some()方法测试数组中的至少一个元素是否通过了由提供的函数实现的测试。它返回一个布尔值。

let bookList = [
    {
    title:"The Way of Kings",
    author: "B Sanderson",
    pages: 900,
    isAvailable:false
    },
    {
    title:"Words of radiance",
    author: "B Sanderson",
    pages: 1087,
    isAvailable:true
    },

    {
    title:"Oathbringer",
    author: "B Sanderson",
    pages: 1000,
    isAvailable:false
    }
];


function hasBook(title, bookShelf) {

	return bookShelf.some((o) => o.title.toLowerCase() === title.toLowerCase());
}

console.log(hasBook('Oathbringer', bookList));

答案 1 :(得分:1)

您可以执行以下操作:

function hasBook(title, bookShelf) {
    const book = bookShelf.find(book => book.title === title)
    return book ? true : false;
}

然后,您这样称呼它:

const result = hasBook("Oathbringer", bookList)

遵循一个完整的工作示例:

let bookList = [
    {
    title:"The Way of Kings",
    author: "B Sanderson",
    pages: 900,
    isAvailable:false
    },
    {
    title:"Words of radiance",
    author: "B Sanderson",
    pages: 1087,
    isAvailable:true
    },

    {
    title:"Oathbringer",
    author: "B Sanderson",
    pages: 1000,
    isAvailable:false
    }
];


function hasBook(title, bookShelf) {
    const book = bookShelf.find(book => book.title === title)
    return book ? true : false;
}



console.log(`Has book ${hasBook("Oathbringer", bookList)}`);