2012-03-14 80 views
0

如果我有文件名并想删除整个记录 例如filename 3.jpg我想删除该文件名的整个记录​​。我怎么做? 多一点细节是我想删除这个纪录 { “状态”: “成功”, “文件名”: “3.JPG”, “mainpic”: “假”, “fullurl”:”。 ./userimages/5c49c449-50b4-43e4-b218-5913b59bd994.jpg” },从JSON对象删除记录Javascript

[ 
{ 
    "status": "success", 
    "filename": "1.jpg", 
    "mainpic": "false", 
    "fullurl": "../userimages/f0380e08-18de-4fdb-80a2-a912809bda97.jpg" 
}, 
{ 
    "status": "success", 
    "filename": "2.jpg", 
    "mainpic": "false", 
    "fullurl": "../userimages/7a4362c8-c9c5-48ee-8672-c332eae59f37.jpg" 
}, 
{ 
    "status": "success", 
    "filename": "3.jpg", 
    "mainpic": "false", 
    "fullurl": "../userimages/5c49c449-50b4-43e4-b218-5913b59bd994.jpg" 
}, 
{ 
    "status": "success", 
    "filename": "eb0b4954-342c-4c3b-87fe-4744511c1b80.jpg", 
    "mainpic": "false", 
    "fullurl": "../userimages/eb0b4954-342c-4c3b-87fe-4744511c1b80.jpg" 
}, 
{ 
    "status": "success", 
    "filename": "e23ce9e8-5062-41d4-8aea-d11aa795ac45.jpg", 
    "mainpic": "true", 
    "fullurl": "../userimages/e23ce9e8-5062-41d4-8aea-d11aa795ac45.jpg" 
}, 
{ 
    "status": "success", 
    "filename": "d6343604-e6eb-4caa-82bf-2b5c2b346f71.jpg", 
    "mainpic": "false", 
    "fullurl": "../userimages/d6343604-e6eb-4caa-82bf-2b5c2b346f71.jpg" 
}, 
{ 
    "status": "success", 
    "filename": "9768f36a-61b8-4f15-995c-28e38dfe48ad.JPG", 
    "mainpic": "false", 
    "fullurl": "../userimages/9768f36a-61b8-4f15-995c-28e38dfe48ad.JPG" 
} 

]

+0

如果可能的话,最好是阻止它进入你的json结果,当你需要这些文件时。你没有使用尽可能多的带宽,你没有改变你的JSON对象:-) – mimo 2012-03-14 06:14:44

回答

1

没有为这一个简单的解决方案..

 var destArr=[]; 
     var srcArr=[{status:"success",filename:"1.jpg",mainpic:"false",fullurl:"../userimages/f0380e08-18de-4fdb-80a2-a912809bda97.jpg"},{status:"success",filename:"2.jpg",mainpic:"false",fullurl:"../userimages/7a4362c8-c9c5-48ee-8672-c332eae59f37.jpg"},{status:"success",filename:"3.jpg",mainpic:"false",fullurl:"../userimages/5c49c449-50b4-43e4-b218-5913b59bd994.jpg"},{status:"success",filename:"eb0b4954-342c-4c3b-87fe-4744511c1b80.jpg",mainpic:"false",fullurl:"../userimages/eb0b4954-342c-4c3b-87fe-4744511c1b80.jpg"},{status:"success",filename:"e23ce9e8-5062-41d4-8aea-d11aa795ac45.jpg",mainpic:"true",fullurl:"../userimages/e23ce9e8-5062-41d4-8aea-d11aa795ac45.jpg"},{status:"success",filename:"d6343604-e6eb-4caa-82bf-2b5c2b346f71.jpg",mainpic:"false",fullurl:"../userimages/d6343604-e6eb-4caa-82bf-2b5c2b346f71.jpg"},{status:"success",filename:"9768f36a-61b8-4f15-995c-28e38dfe48ad.JPG",mainpic:"false",fullurl:"../userimages/9768f36a-61b8-4f15-995c-28e38dfe48ad.JPG"}]; 
     for(i in srcArr){ 
      if(srcArr[i].filename!="3.jpg") 
       destArr[i]=srcArr[i]; 
      } 
     // destJson contains the content excluding node with 3.jpg 
     //You can replace the original content with destJson 
     srcArr=destArr; 
//Now srcArr contains everything excluding with 3.jpg 

我做什么,我反复源阵列,并通过Json的节点到目的数组,如果文件名不等于“3。 JPG”。您可以再次使用destArray替换srcArr以将结果转换为原始JSON。

+1

有点修改我没有得到这个工作。它与Westo提供的空记录有相同的问题。 – scripter78 2012-03-15 06:45:35

+0

不知道,你能告诉你做了什么修改吗? – 2012-03-15 10:57:41

+0

var p = 0; (picturearr){ if(picturearr [i] .filename!= n)destArr [p] = picturearr [i]; p ++; } } – scripter78 2012-03-15 15:28:45

4

试试这个功能:

function deleteRecordByFileName (myArr, fileName) { 
    var index = null; 
    for (var i =0; i < myArr.length; i++) { 
     if (myArr[i].filename === fileName) { 
      index = i; 
      break; 
     } 
    } 
    if (index !== null) { 
     myArr.splice(index, 1); 
    } 
} 

和呼叫deleteRecordByFileName (yourArray, "3.jpg");

+0

我已经测试过这个,但一直没能得到它的工作 – scripter78 2012-03-15 06:44:43

+0

它工作正常,检查这个小提琴http://jsfiddle.net/5MUnf/ – Nemoy 2012-03-15 07:15:01

0

这将做到这一点。可以更好地使用jQuery。

for(var i in demo) { 
    if(demo[i].filename === "3.jpg") { 
     delete demo[i]; 
    } 
} 
+0

好吧所以我尝试了这一个,我喜欢这个简单但我发现,虽然这确实删除了有问题的记录,但它并没有移动剩余的记录来填充这个地方,所以你最终得到一个空记录。 – scripter78 2012-03-15 06:43:20

+0

var p = 0; (picturearr){ if(picturearr [i] .filename!= n)destArr [p] = picturearr [i]; p ++; alert('picture array'+ picturearr [i] .filename +'N value'+ n +'position'+ i); } } – scripter78 2012-03-15 06:48:24

0

比Nemoy的回答更短

(function (myArr, fileName) { 
    for (var i =0; i < myArr.length; i++) { 
     if (myArr[i].filename === fileName) { 
      myArr.splice(i, 1); 
      return; 
     } 
    } 
})(srcArr, "3.jpg"); 
+0

我不敢说我​​不知道​​如何甚至impliment这一个 – scripter78 2012-03-15 06:44:24

0

好,我有几个很好的答案,我也结束了是下面的代码去。因为拼接选项不会从要删除的节点位置添加空节点。另外它是我能找到的最干净的选项。这是这里提供的代码的混合体,所以我相信每个人都确实提供了很好的信息。

for (var i in picturearr) { 
if (picturearr[i].filename === n) { 
    picturearr.splice(i, 1); 
} 
}