2015-04-30 101 views
1

http://jsfiddle.net/0444046b/12/去除数组中的数组对象

对象我有对象的复杂阵列,每个对象都有它自己的标签阵列。

我也只有一个对象,它应该与标签数组中的一个对象相匹配,如果是这样的话,请删除该标签。

Got some help here,但是我的例子太简单了,到目前为止没有这样的运气。

基本上我有对象tag,我需要将其从tags阵列中删除tagsArray

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); 
    } 
}); 

回答

1

丹尼尔IMMS的解决方案是完全罚款,但是这一次也能解决你的问题,它是一个有点快。

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

 
var removedTag = { 
 
    name: "4", 
 
    tag_id: "1012" 
 
}; 
 

 
var message = 'Before:</br>' + JSON.stringify(tagsArray) + '</br></br>'; 
 

 
tagsArray.forEach(function(obj, i) { 
 
    obj.tags.forEach(function(tag, j) { 
 
    if (tag.tag_id === removedTag.tag_id && tag.name === removedTag.name) { 
 
     obj.tags.splice(j, 1); 
 
     return; 
 
    } 
 
    }); 
 
}); 
 

 
message += 'After:</br>' + JSON.stringify(tagsArray); 
 

 
document.body.innerHTML = message

我jsPerf测试,这里是link这里是结果。 enter image description here

+0

谢谢!选择此一个,因为它也解决了开发代码我的问题。在'过滤器“是由于某种原因删除我所有的标签对象。 –

2

您可以遍历tagsArray中的每个项目,然后筛选内部标记属性中的匹配元素。

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

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

 
var message = 'Before:<br>' + JSON.stringify(tagsArray) + '<br><br>'; 
 

 
tagsArray.forEach(function(element) { 
 
    element.tags = element.tags.filter(function(tag) { 
 
    return tag.name != removeTag.name && tag.tag_id != removeTag.tag_id; 
 
    }) 
 
}); 
 

 
message += 'After:<br>' + JSON.stringify(tagsArray); 
 
document.body.innerHTML = message

+0

谢谢,这确实在工作的jsfiddle,只是不明白,为什么在我的开发代码,现在删除每一个标签:( –