Мой вопрос быстрый. Вот проблема:
//Gets string from database in "User1|User2|User3" format
var frArray = res[0].friendRequests.split('|');
//frArray should now equal ['User1', 'User2', etc]
//data.friend is a string for the friend we are removing from requests
//let's assume it's User1
console.info(frArray.indexOf(data.friend)); //This prints 0
console.info(frArray); //This prints User1 which is correct
frArray = frArray.splice(frArray.indexOf(data.friend), 1);
console.info(frArray);
//This prints User1 STILL which is not correct it should've removed it
Буду признателен за помощь, не могу разобраться. Я застрял на этом некоторое время. Спасибо



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


splice возвращает массив удаленных вами элементов. Просто удалите присваивание, чтобы ваша переменная продолжала ссылаться на исходный массив, который был изменен на месте:
frArray.splice(frArray.indexOf(data.friend), 1);
Пример:
const frArray = ["Jane", "Mohammed", "An"];
const removed = frArray.splice(0, 1);
console.info(`removed: ${JSON.stringify(removed)}`);
console.info(`frArray: ${JSON.stringify(frArray)}`);Согласно документации Array.splice:
The splice() method changes the contents of an array by removing or replacing existing elements and/or adding new elements in place.
И это возвращается:
An array containing the deleted elements. If only one element is removed, an array of one element is returned. If no elements are removed, an empty array is returned.
Итак, spliceмутирует массив оригинальный и возвращает removed elements.
В вашем коде у вас есть: frArray = frArray.splice(frArray.indexOf(data.friend), 1);
Где вы назначение результат splice для вашего frArray вместо простого выполнения splice, а затем продолжаете использовать исходный (теперь мутированный массив):
var frArray = res[0].friendRequests.split('|');
frArray.splice(frArray.indexOf(data.friend), 1); // <-- no assignment
console.info(frArray);