Javascript 如何通过改变数组的进程从数组中移除元素?

Javascript 如何通过改变数组的进程从数组中移除元素?,javascript,arrays,object,mutation,remove,Javascript,Arrays,Object,Mutation,Remove,我有一个像这样的对象数组: const jokes = [ {jokeId: 255, jokeText: "había un borrachín en un boliche", categoryId: "284"}, {jokeId: 243, jokeText: "había una borrachín en un boliche", categoryId: "284"}, {jokeId: 554,

我有一个像这样的对象数组:

const jokes = [
  {jokeId: 255, jokeText: "había un borrachín en un boliche", categoryId: "284"},
  {jokeId: 243, jokeText: "había una borrachín en un boliche", categoryId: "284"},
  {jokeId: 554, jokeText: "había otro borrachín en un boliche", categoryId: "284"},
  {jokeId: 424, jokeText: "jodido loco el tipo", categoryId: "256"},
  {jokeId: 257, jokeText: "había un loco en el manicomio", categoryId: "256"},
  {jokeId: 579, jokeText: "remamado estaba!", categoryId: "836"},
];
我唯一需要做的就是删除/删除categoryId=256的所有对象,修改数组。 我曾尝试用拼接方法(ES6方法)链接过滤器,但我做不到。

让我们来开玩笑吧=
[
{jokeId:255,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:243,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:554,jokeText:“había otro borrachín en un boliche”,分类:“284”},
{jokeId:424,jokeText:“jodido loco el tipo”,分类:“256”},
{jokeId:257,jokeText:“había un loco en el-manicomio”,分类:“256”},
{jokeId:579,jokeText:“remamado estaba!”,分类:“836”},
];
const result=crooks.filter(item=>item.categoryId!==“256”);
控制台日志(结果)
让我们来开玩笑吧=
[
{jokeId:255,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:243,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:554,jokeText:“había otro borrachín en un boliche”,分类:“284”},
{jokeId:424,jokeText:“jodido loco el tipo”,分类:“256”},
{jokeId:257,jokeText:“había un loco en el-manicomio”,分类:“256”},
{jokeId:579,jokeText:“remamado estaba!”,分类:“836”},
];
const result=crooks.filter(item=>item.categoryId!==“256”);
控制台日志(结果)
让我们来开玩笑吧=
[
{jokeId:255,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:243,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:554,jokeText:“había otro borrachín en un boliche”,分类:“284”},
{jokeId:424,jokeText:“jodido loco el tipo”,分类:“256”},
{jokeId:257,jokeText:“había un loco en el-manicomio”,分类:“256”},
{jokeId:579,jokeText:“remamado estaba!”,分类:“836”},
];
const filtedjones=jokes.filter(joke=>joke.categoryId!=='256')
console.log(过滤笑话)
让我们来开玩笑吧=
[
{jokeId:255,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:243,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:554,jokeText:“había otro borrachín en un boliche”,分类:“284”},
{jokeId:424,jokeText:“jodido loco el tipo”,分类:“256”},
{jokeId:257,jokeText:“había un loco en el-manicomio”,分类:“256”},
{jokeId:579,jokeText:“remamado estaba!”,分类:“836”},
];
const filtedjones=jokes.filter(joke=>joke.categoryId!=='256')

log(filtedjones)
如果您想要一个简单的ES6方法,您可以使用过滤器覆盖“jones”的值

jokes = jokes.filter(joke => joke.categoryId !== "256");

如果您想要一个简单的ES6方法,您可以使用过滤器覆盖“笑话”的值

jokes = jokes.filter(joke => joke.categoryId !== "256");

执行此操作的最简单方法(修改现有数组)是迭代数组,找到要删除的元素的索引,然后调用
.splice()
,如下所示:

const笑话=
[
{jokeId:255,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:243,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:554,jokeText:“había otro borrachín en un boliche”,分类:“284”},
{jokeId:424,jokeText:“jodido loco el tipo”,分类:“256”},
{jokeId:257,jokeText:“había un loco en el-manicomio”,分类:“256”},
{jokeId:579,jokeText:“remamado estaba!”,分类:“836”},
];
让我们删除=[]
for(设i=0;i<0.length;i++){
if(笑话[i].categoryId==256){
移除。推动(i)
}
}
//每个splice()调用都会移动下一个项
设为0
对于(让idx的删除){
接头(idx-已拆除,1)
删除+=1
}

console.log(笑话)
执行此操作的最简单方法(修改现有数组)是遍历数组,找到要删除的元素的索引,然后调用
.splice()
,如下所示:

const笑话=
[
{jokeId:255,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:243,jokeText:“borrachín en un boliche”,分类:“284”},
{jokeId:554,jokeText:“había otro borrachín en un boliche”,分类:“284”},
{jokeId:424,jokeText:“jodido loco el tipo”,分类:“256”},
{jokeId:257,jokeText:“había un loco en el-manicomio”,分类:“256”},
{jokeId:579,jokeText:“remamado estaba!”,分类:“836”},
];
让我们删除=[]
for(设i=0;i<0.length;i++){
if(笑话[i].categoryId==256){
移除。推动(i)
}
}
//每个splice()调用都会移动下一个项
设为0
对于(让idx的删除){
接头(idx-已拆除,1)
删除+=1
}
console.log(笑话)
我唯一需要做的就是删除/删除所有categoryId=256的对象,修改数组。我曾尝试用
拼接方法
链接
过滤器
(ES6方法),但我做不到

有些情况下,例如OP遇到的情况,无法将筛选结果重新分配给原始源引用。就像

const arr = [1, 2, 3]; arr = arr.filter(/* ... */);
。。。这将失败。还可能需要处理不允许写入但仍可能发生变异的属性

使用OP已经尝试过的完全相同的方法(“我尝试将
过滤器
链接到
拼接
方法…”),可以将此类问题的解决方案概括为基于回调的变异移除实现,这正是
过滤器
所要求的,其中,此回调函数是是否删除数组项的条件

函数removeEveryMatchingItemByCondition(arr、condition、target){
目标=(目标??空);
设idx=ar