如何基于查找该对象内对象的属性来查找对象的索引值

时间:2014-12-20 05:07:15

标签: javascript jquery arrays object

目前我正在遍历此对象以查找我寻找的属性:值对

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,但我不知道在这种情况下如何做到这一点。

3 个答案:

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