2013-08-23 145 views
1

我收到从一个php文件输出JSON, 与一些对象,像这样:如何从JavaScript对象数组中删除特定的元素?

[ 
    { "home_content" : "Nam feugiat sem diam, ut fermentum orci hendrerit sit amet.", 
    "home_id" : 2, 
    "home_img" : "tech.png", 
    "home_title" : "Latest Technologies Development" 
    }, 
    { "home_content" : "לורם לורם", 
    "home_id" : 239, 
    "home_img" : "http://placehold.it/400", 
    "home_title" : "שוק פירות וירקות" 
    }, 
    { "home_content" : "New Item Content", 
    "home_id" : 259, 
    "home_img" : "http://www.placehold.it/100", 
    "home_title" : "New Home Item" 
    } 
] 

在我的应用我想删除某个对象, 是有没有办法收到它的位置说通过home_id? 或任何可以让我从该列表中区分某个对象

+3

你有对象的数组,你可以通过数组迭代,每次检查的'home_id'。 – tymeJV

+0

你的问题是什么,因为它看起来像你实际上问过两个问题。你想知道如何*搜索*匹配'home_id'的特定对象的数组,或者你想从数组中匹配'home_id'的对象吗? – BenM

+0

是的,这可以很容易地完成。你是否尝试过实施某些东西并遇到问题? –

回答

3

你有什么有对象的数组,所以你可以通过数组循环,直到你找到一个与所需home_id

var index; 
for (index = 0; index < array.length; ++index) { 
    if (array[index].home_id === 2) { 
     array.splice(index, 1); // Removes this entry 
     break;     // Exits the loop 
    } 
} 
+0

+1因为你是最好的。 – naomik

+0

好的,谢谢你指出这是一个'数组对象'。 我结束了循环显示的数组,但是使用coffeescript: for item,z in $ scope.home –

1

你有什么是数组(从JSON解析获得的),所以你必须找到正确的索引,它拼接:

function delObjWithHomeId(arr, id) { 
    for(var i=0; i<arr.length; i++) { 
     if(arr[i].home_id === id) { 
      return arr.splice(i,1); 
     } 
    } 
} 
1

你张贴什么有对象的数组。这是一个重要的区别 - 尽管在JavaScript中,并且数组的一种对象。

如您所见,对象可以包含与数据元素对应的字母数字属性名称(如果您愿意的话)。相反,一个数组从数字开始,索引为0.它很像一个对象,但属性名称都是数字,并且都是按顺序排列的。

所以,想象你的数据是这样的:

{ 
0:{ 
home_id: 2 
home_title: Latest Technologies Development 
home_img: tech.png 
home_content: Nam feugiat sem diam, ut fermentum orci hendrerit sit amet. 
}, 
1:{ 
home_id: 239 
home_title: שוק פירות וירקות 
home_img: http://placehold.it/400 
home_content: לורם לורם 
}, 
2:{ 
home_id: 259 
home_title: New Home Item 
home_img: http://www.placehold.it/100 
home_content: New Item Content 
} 
} 

您可以使用多种方法来操作数组,像push()pop()shift()。要访问特定的一个,通常会结束循环(除非您已知道正确的索引)。

有几种方法来循环阵列,while是的许多可能的方法之一:

var i = 0; 
while(var oneItem = myArray[i++]){ 
    if (oneItem.home_id == theItemIdIAmLookingFor) { 
     myArray.splice(i, 1); 
     break; 
    } 
} 

文档

+0

如果删除,则只删除属性i,但不改变长度。所以它在阵列中留下了一个空白。 – bfavaretto

+0

够公平,纠正:) –

相关问题