Javascript Node.JS-filter()仅在索引中硬编码时有效

Javascript Node.JS-filter()仅在索引中硬编码时有效,javascript,arrays,node.js,Javascript,Arrays,Node.js,尝试筛选和数组以获取与用户输入不匹配的对象。取下一本书 用户输入: { 标题:"意外之财",, 作者:《詹姆》, 身体:“身体的另一个身体” } 过滤器正在查看的数组来自JSON,然后被解析: [ { title: 'title1', author: 'samson', body: 'this is the body' }, { title: 'WindFall', author: 'Jaime', body: 'another body of a bod

尝试筛选和数组以获取与用户输入不匹配的对象。取下一本书

用户输入: { 标题:"意外之财",, 作者:《詹姆》, 身体:“身体的另一个身体” }

过滤器正在查看的数组来自JSON,然后被解析:

    [
  { title: 'title1', author: 'samson', body: 'this is the body' },
  {
    title: 'WindFall',
    author: 'Jaime',
    body: 'another body of a body'
  }
]
代码库:

function removeItem(item) {
try {
    const arrOfBooks = fs.readFileSync("./appendJSON.json").toString();
    const arrOfBooksParse = JSON.parse(arrOfBooks);

    const newArr = arrOfBooksParse.filter(item => {
        return arrOfBooksParse[item].title !== item.title;
    });
    console.log(newArr);

} catch (error) {
    console.log("There is nothing to remove");
}
}

因为我知道第二个对象===用户输入,硬编码

return arrOfBooksParse[1].title !== item.title;

工作但返回arrOfBooksParse[item]。标题!==项目名称;没有。取而代之的是catch in try/catch off。

请尝试以下方法:

const newArr = arrOfBooksParse.filter(book => {
    return book.title !== item.title;
});

您只需在筛选器中将书籍命名为与传入的项目不同的名称。

项目它是数组中的对象。它没有索引。和项重写参数中的项

固定代码:

函数RemoveItem{ 试一试{ const arrOfBooks=fs.readFileSync./appendJSON.json.toString; const arrOfBooksParse=JSON.parsearrOfBooks; const newArr=arrOfBooksParse.filteri=>i.title!==item.title; console.lognewArr; }捕捉错误{ console.log没有要删除的内容; } } 回调中的项是实际项。不是索引。使用该项在数组中查找会导致您陷入困境

filter方法提供元素,而不是在数组中查找值。您需要做的只是重命名一个参数,并使用过滤器回调传递给您的项

看起来是这样的:

function removeItem(item) {
try {
    const arrOfBooks = fs.readFileSync("./appendJSON.json").toString();
    const arrOfBooksParse = JSON.parse(arrOfBooks);

    const newArr = arrOfBooksParse.filter(currentItem => {
        return currentItem.title !== item.title;
    });
    console.log(newArr);

} catch (error) {
    console.log("There is nothing to remove");
}

因为你使用了相同的变量!!!!函数中的项和筛选器中的项,并且您尝试在筛选器中同时使用这两个项。arrOfBooksParse[item]。title但item是一个对象-您可以在item之后立即使用它。titleBy arrOfBooksParse[item],您可能只是指item。然后你就有了epascarello提到的问题。另外,不要用try来包装它,这会隐藏很多有用的错误。您是否尝试正确地建立索引….筛选项,索引={return arrOfBooksParse[index].title….?虽然正如我上面的人所指出的,这里的错误似乎很清楚,但我将再次重复这个问题,以备将来了解:如果你问的是一个关于不起作用的代码的问题,而该代码抛出了一个错误,那么分享它是非常有帮助的:谢谢你,它起了作用。在我发布了这个问题之后,我意识到这两项关键字可能是错误的这是一个问题,但仍然不知道如何解决。您的解决方案总结得很好。谢谢@Dzmitry