Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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_For Loop - Fatal编程技术网

Javascript 在数组对象中从数组中删除对象

Javascript 在数组对象中从数组中删除对象,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我有一个复杂的对象数组,每个对象都有自己的标记数组 我还有一个对象,它应该与标记数组中的一个对象相匹配,如果是这样,就删除该标记 ,但是我的例子太简单了,到目前为止,下面的例子没有成功 基本上,我有对象标记,我需要将其从标记数组中的标记中删除 var tagsArray = [{ name: "group1", tags: [ { name: "1", tag_id: "123

我有一个复杂的对象数组,每个对象都有自己的标记数组

我还有一个对象,它应该与标记数组中的一个对象相匹配,如果是这样,就删除该标记

,但是我的例子太简单了,到目前为止,下面的例子没有成功

基本上,我有对象
标记
,我需要将其从
标记
数组中的
标记
中删除

var tagsArray = [{
        name: "group1",
        tags: [
            {
                name: "1",
                tag_id: "1234"
            },
            {
                name: "2",
                tag_id: "5678"
            },
            {
                name: "3",
                tag_id: "9012"
            }
         ]
},
{
    name: "group2",
    tags: []
}
];

console.log(tagsArray[0]);

// Need to find this inside of tags inside of tagsArray and remove it:
var tag = {
    name: "3",
    tag_id: "9012"
}

var temp_array = [];
temp_array.push(tag);

var map = {};

tagsArray.forEach(function(obj, index) {
    map[obj.tag_id] = index;
});

console.log(map);


temp_array.forEach(function(obj) {
    if ( obj.tag_id ) {
        tagsArray.splice(tagsArray[map[obj.tag_id]]);
        console.log(tagsArray);
    }
});

您可以循环浏览
tagsArray
中的每个项目,然后在内部标记属性中过滤匹配的元素

var tagsArray=[{
名称:“组1”,
标签:[{
名称:“1”,
标签id:“1234”
}, {
名称:“2”,
标签id:“5678”
}, {
名称:“3”,
标签id:“9012”
}]
}, {
名称:“组2”,
标签:[]
}];
//需要在tagsArray内的标记内部找到此标记并将其删除:
var removeTag={
名称:“3”,
标签id:“9012”
}
var message='Before:
'+JSON.stringify(tagsArray)+'

'; tagsArray.forEach(函数(元素){ element.tags=element.tags.filter(函数(标记){ 返回tag.name!=removeTag.name&&tag.tag\u id!=removeTag.tag\u id; }) }); message+='After:
'+JSON.stringify(tagsArray);
document.body.innerHTML=message
Daniel Imms的解决方案非常好,但是这个解决方案也可以解决您的问题,而且速度更快

var tagsArray=[{
名称:“组1”,
标签:[{
名称:“1”,
标签id:“1234”
}, {
名称:“2”,
标签id:“5678”
}, {
名称:“3”,
标签id:“9012”
}]
}, {
名称:“组2”,
标签:[{
名称:“4”,
标签号:“1012”
}]
}];
var removedTag={
名称:“4”,
标签号:“1012”
};
var message='Before:
'+JSON.stringify(tagsArray)+'

'; tagsArray.forEach(函数(obj,i){ obj.tags.forEach(函数(tag,j){ if(tag.tag\u id==removedTag.tag\u id&&tag.name===removedTag.name){ 目标标签拼接(j,1); 返回; } }); }); message+='After:
'+JSON.stringify(tagsArray);
document.body.innerHTML=message
谢谢,这在JSFIDLE中确实有效,只是不明白为什么在我的开发代码中它现在删除了每个标记:(谢谢!选择这个,因为它也解决了我在开发代码中的问题。
过滤器
出于某种原因删除了我所有的标记对象。