Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-如何从包含特定字符串的数组中删除对象?_Javascript_Arrays_Loops_Object - Fatal编程技术网

JavaScript-如何从包含特定字符串的数组中删除对象?

JavaScript-如何从包含特定字符串的数组中删除对象?,javascript,arrays,loops,object,Javascript,Arrays,Loops,Object,我的数组有几个对象。某些对象包含特定字符串,如果该对象包含此特定字符串,我希望将其从数组中删除 我尝试使用while循环查找数组中所有有“臭味”的索引,然后拼接每个索引 最后,我希望数组只包含 [ name: "Tiffany", status: "Clean", name: "Space-man", status: "Clean", name: "Soap-man",

我的数组有几个对象。某些对象包含特定字符串,如果该对象包含此特定字符串,我希望将其从数组中删除

我尝试使用while循环查找数组中所有有“臭味”的索引,然后拼接每个索引

最后,我希望数组只包含

[  
    name: "Tiffany", status: "Clean",
    name: "Space-man", status: "Clean",
    name: "Soap-man", status: "Clean",
]
让myArray=[
{姓名:“蒂米”,身份:“臭”},
{名称:“蒂芙尼”,状态:“干净”},
{姓名:“凯尔”,身份:“臭”},
{姓名:“太空人”,状态:“清洁”},
{姓名:“肥皂人”,状态:“干净”},
]
while(i=0){
试一试{
让find=myArray.findIndex(i=>i.status===`somey`);
myArray.splice(find,1);
}抓住{
i=1;
}
}
log(myArray)
只需过滤它

您可以选择创建新的筛选数组或替换现有数组

let myArray=[{name:“Timmy”,status:“Stumy”},{name:“Tiffany”,status:“Clean”},{name:“Kyle”,status:“Stumy”},{name:“Space man”,status:“Clean”},{name:“Soap man”,status:“Clean”}]
//过滤到新数组中
const cleanArray=myArray.filter(item=>item.status!==“臭味”)
console.log(cleanArray)
//或替换:
myArray=myArray.filter(item=>item.status!==“臭”)

console.log(myArray)
您可以使用
Array.filter

const值=[
{姓名:“蒂米”,身份:“臭”},
{名称:“蒂芙尼”,状态:“干净”},
{姓名:“凯尔”,身份:“臭”},
{姓名:“太空人”,状态:“清洁”},
{姓名:“肥皂人”,状态:“干净”}
];
const result=value.filter((item)=>item.status!==“臭味”);
控制台日志(结果)将过滤器用作:
让myArray=[
{姓名:“蒂米”,身份:“臭”},
{名称:“蒂芙尼”,状态:“干净”},
{姓名:“凯尔”,身份:“臭”},
{姓名:“太空人”,状态:“清洁”},
{姓名:“肥皂人”,状态:“干净”},
]
让result=myArray.filter(i=>i.status!=='somey');

log(result)
如果希望保留数组的对象引用,可以从数组末尾进行迭代

如果从开始拼接,则更改索引

let array=[{name:“Timmy”,status:“Stumy”},{name:“Tiffany”,status:“Clean”},{name:“Kyle”,status:“Stumy”},{name:“Space man”,status:“Clean”},{name:“Soap man”,status:“Clean”},
i=数组长度;
而(i--)if(array[i].status==`somey`)array.splice(i,1);
console.log(数组)

.as控制台包装{max height:100%!important;top:0;}
首先,在while循环中需要一个布尔值。因此,您可以添加一个从0开始的计数器,并在计数器小于数组长度时运行循环

代码如下:

让myArray=[
{姓名:“蒂米”,身份:“臭”},
{名称:“蒂芙尼”,状态:“干净”},
{姓名:“凯尔”,身份:“臭”},
{姓名:“太空人”,状态:“清洁”},
{姓名:“肥皂人”,状态:“干净”},
]
设计数器=0;
while(计数器i.status===`somey`);
如果(查找!=-1){
myArray.splice(find,1);
}否则{
计数器++;
}
}

forEach(el=>console.log(el))
拼接
非常昂贵。它必须在移除后移动所有后续元素。你在一个循环中这样做

大多数时候我都会和你一起去。它简单又安全;当我从列表中“删除”项目时,没有意外的副作用(例如,由于我忘记了某些其他代码也使用此列表而消失的内容)

但有时我明确地想要或需要改变列表本身。这里有一个小的实用函数:

像splice一样,它将所有元素移向低索引,像filter一样,它只保留与谓词匹配的元素

const值=[
{姓名:“蒂米”,身份:“臭”},
{名称:“蒂芙尼”,状态:“干净”},
{姓名:“凯尔”,身份:“臭”},
{姓名:“太空人”,状态:“清洁”},
{姓名:“肥皂人”,状态:“干净”}
];
函数filterPlace(数组、谓词){
设j=0;
for(设i=0;iitem.status!==“臭味”);
console.log(结果==值);

控制台日志(结果)只需过滤它..这听起来比
array=array.filter(…)
要重得多,但是array=array.filter()也一样,如果你这么说的话。这很重要为什么?因为op想拼接。这并没有改变参考。对于如此简单的事情来说,这太复杂了