为什么 findIndex() 返回 0,而不是所需的索引?

Why does findIndex() return 0, instead of the desired index?

提问人:TraktorJack 提问时间:5/5/2021 最后编辑:marc_sTraktorJack 更新时间:6/6/2021 访问量:1117

问:

我一直在试图弄清楚如何检索所需的索引。我有一个用户将姓名添加到访客列表,并可以选择删除姓名。所有名称都附加到保存到 localStorage 的数组中。单击删除按钮时,我想遍历数组,找到匹配的字符串并检索其索引。然而,如果字符串不匹配,我得到的只是 -1,如果匹配,则为 0。我的错误在哪里?任何帮助都是值得赞赏的。

deleteBtn.addEventListener('click', function () {     // Makes the Delete button active.
            const deleteName = this.parentElement.innerText;     // parent element is li
            const test = localStorage.getItem('data');
            const testParsed = JSON.parse(test);
           
            for (let i = 0; i < testParsed.length; i++) {
                let compare = `Name: ${testParsed[i].name}, About: ${testParsed[i].about}Delete entry`; // matches innerHtml of deleteName
               compare.replace('.,:', '');    // Removes unwanted punctuation
                console.log('Compare: ', compare);

                function index(){
                    return deleteName === compare;
                }
                console.log(testParsed.findIndex(index));
JavaScript的

评论

0赞 Peter B 5/5/2021
旁注:修改 的内容。index() 函数需要一个参数:(或者为了避免混淆,可以使用不同的名称,因为已经在使用)compare.replace()comparefunction index(deleteName){ ... }deleteName
0赞 TraktorJack 5/5/2021
这样?' function index(equals){ return equals === compare; } console.log(testParsed.findIndex(index));`
0赞 Peter B 5/5/2021
是的,或者其他什么,我个人会使用像 或 这样的名称itementrytext

答:

0赞 TraktorJack 5/5/2021 #1

我又玩了一会儿,想通了。我会把这个问题留出来,以防其他人可以利用它。

     deleteBtn.addEventListener('click', function () {  // Makes the Delete button active.
            const deleteName = this.parentElement.innerText; // parent element is li
            const test = localStorage.getItem('data');
            const testParsed = JSON.parse(test);
            console.log(test);

            for (let i = 0; i < testParsed.length; i++) {
                let compare = `Name: ${testParsed[i].name}, About: ${testParsed[i].about}Delete entry`; // matches innerHtml of deleteName
               compare.replace('.,:', '');  // Removes unwanted punctuation
                console.log('Compare: ', compare);


                if(deleteName === compare) {
                    function index(equals) {  // compare is string, equals is object
                        return equals.name === testParsed[i].name && equals.about === testParsed[i].about;
                    }

                    console.log(testParsed.findIndex(index));
                }