Почему не работает функция Splice в Javascript? - PullRequest
0 голосов
/ 31 мая 2019


Мой вопрос быстрый. Вот проблема:

//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.log(frArray.indexOf(data.friend)); //This prints 0 

console.log(frArray); //This prints User1 which is correct

frArray = frArray.splice(frArray.indexOf(data.friend), 1);

console.log(frArray); 
//This prints User1 STILL which is not correct it should've removed it

Я был бы признателен за любую помощь, я не могу понять это. Я застрял на этом некоторое время. Спасибо

Ответы [ 2 ]

3 голосов
/ 31 мая 2019

splice возвращает массив элементов, которые вы удалили.Просто удалите присвоение, чтобы ваша переменная продолжала ссылаться на исходный массив, который был изменен на месте:

frArray.splice(frArray.indexOf(data.friend), 1);

Пример:

const frArray = ["Jane", "Mohammed", "An"];
const removed = frArray.splice(0, 1);
console.log(`removed: ${JSON.stringify(removed)}`);
console.log(`frArray: ${JSON.stringify(frArray)}`);
1 голос
/ 31 мая 2019

Согласно документации Array.splice:

Метод splice () изменяет содержимое массива путем удаления или замены существующих элементов и / или добавления новых элементовна месте.

И он возвращает :

Массив, содержащий удаленные элементы.Если удаляется только один элемент, возвращается массив из одного элемента.Если никакие элементы не удалены, возвращается пустой массив.

Итак 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.log(frArray); 
...