目前我正在遍历此对象以查找我寻找的属性:值对
var obj = [
{thespecial:"cheese", taco:"none"},
{thespecial:"lettuce", taco:"double"},
{thespecial:"mustard", taco:"melty"}
]
$.each(obj, function(i,v){
if(obj[i].thespecial == "lettuce")
{
//do some stuff..
}
});
哪个有效,但我有一个案例,我想从主obj中删除包含匹配的整个对象。也就是说,主要对象的索引不在同一个地方。所以我需要检测包含匹配的对象的索引。然后将其删除。有没有办法从主要对象中检测匹配的索引?我知道如果我使用更简单的对象或简单的数组我可以简单地做indexOf,但我不知道在这种情况下如何做到这一点。
答案 0 :(得分:2)
假设您obj
实际上应该是一个数组,因为您添加了标记arrays
,如果您检测到匹配并稍后将其删除,则只记录对目标i
的引用。
var target = -1;
$.each(obj, function (i, v) {
if (obj[i].thespecial === "lettuce") {
target = i;
//do some other stuff?
return false; // break the loop if nothing else to do
}
});
if (target >= 0) {
obj.splice(target, 1); // remove item from array
}
另外假设您只想删除一个项目。
<强>更新强>
如果您需要一种方法从&#34;对象中删除各种项目&#34;数组,您可能需要这样的函数:
function removeWithValue(val) {
$.each(obj, function (i) {
if (obj[i].thespecial === val) {
obj.splice(i, 1); // remove item from array
return false; // break the loop
}
});
}
答案 1 :(得分:1)
如果您的对象格式正确,则以下代码可以帮助您
$.each(obj, function(i,v){
if(obj[i].thespecial == "lettuce")
{
delete obj[i];
}
});
答案 2 :(得分:1)
首先,你需要纠正你的对象格式:
var obj = [
{thespecial: "cheese", taco: "none"},
{thespecial: "lettuce", taco: "double"},
{thespecial: "mustard", taco: "melty"}
];
然后循环
$.each(obj, function (i, v) {
if (obj[i].thespecial == "lettuce") {
console.log(obj[i].taco); // your matched data here, perform your act
}
});