为什么Javascript的Splice函数不起作用?

时间:2019-05-31 17:07:49

标签: javascript arrays data-structures


我的问题很快。这是问题所在:

//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 个答案:

答案 0 :(得分:2)

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 :(得分:0)

根据Array.splice的文档:

  

splice()方法通过删除或更改数组的内容   替换现有元素和/或添加新元素。

returns

  

包含删除的元素的数组。如果只有一个元素是   移除后,将返回一个元素的数组。如果没有元素   删除后,将返回一个空数组。

因此,splice 变异 原始数组并返回removed elements

在您的代码中,您拥有:frArray = frArray.splice(frArray.indexOf(data.friend), 1);

要在{strong>将splice的地方,而不只是执行frArray,然后继续使用原始的(现在是变异数组) ):

splice