首页 > 解决方案 > 如何通过传递 ID 从 JSON 中删除项目

问题描述

我有以下 JSON

[  
   {  
      "Id":1068,
      "Name":"jone",
      "SortOrder":0
   },
   {  
      "Id":1077,
      "Name":"John ",
      "SortOrder":0
   },
   {  
      "Id":1074,
      "Name":"sasasa",
      "SortOrder":0
   },
   {  
      "Id":1078,
      "Name":"fdfdfd",
      "SortOrder":0
   },
   {  
      "Id":1029,
      "Name":"fdfdfd",
      "SortOrder":0
   },
   {  
      "Id":1076,
      "Name":"sdf",
      "SortOrder":0
   },
   {  
      "Id":1030,
      "Name":"erer",
      "SortOrder":0
   },
   {  
      "Id":11,
      "Name":"tryryr",
      "SortOrder":0
   },
   {  
      "Id":1008,
      "Name":"bvbf",
      "SortOrder":0
   },
   {  
      "Id":9,
      "Name":"jkk",
      "SortOrder":0
   },
   {  
      "Id":19,
      "Name":"pioku",
      "SortOrder":0
   },
   {  
      "Id":5,
      "Name":"cssxs",
      "SortOrder":0
   },
   {  
      "Id":1009,
      "Name":"mhmh",
      "SortOrder":0
   }
]

现在我需要通过传递 ID 从 JSON 中删除项目。例如,当我将1068,1077ids(逗号分隔)传递给需要从 JSON 中删除相关数据的函数时。

[ { "Id":1074, "Name":"sasasa", "SortOrder":0 }, { "Id":1078, "Name":"fdfdfd", "SortOrder":0 }, { "Id":1029, "Name":"fdfdfd", "SortOrder":0 }, { "Id":1076, "Name":"sdf", "SortOrder":0 }, { "Id":1030, "Name":"erer", "SortOrder":0 }, { "Id":11, "Name":"tryryr", "SortOrder":0 }, { "Id":1008, "Name":"bvbf", "SortOrder":0 }, { "Id":9, "Name":"jkk", "SortOrder":0 }, { "Id":19, "Name":"pioku", "SortOrder":0 }, { "Id":5, "Name":"cssxs", "SortOrder":0 }, { "Id":1009, "Name":"mhmh", "SortOrder":0 } ]

当传递1009,1068,1074,1078,1029,1076,1030,11,1008给 JSON 之后的函数时,应该是结果。

[  
   {  
      "Id":9,
      "Name":"jkk",
      "SortOrder":0
   },
   {  
      "Id":19,
      "Name":"pioku",
      "SortOrder":0
   },
   {  
      "Id":5,
      "Name":"cssxs",
      "SortOrder":0
   },
   {  
      "Id":1009,
      "Name":"mhmh",
      "SortOrder":0
   }
]

最有效的方法是什么?请注意。我不能使用 ES6 或 ES5,因为某些 ES5、ES6 功能在 IE 和 Safari 浏览器中不起作用。

标签: javascriptjqueryjson

解决方案


这可以解决问题。可以使用 Array 方法(如.mapor )来减少冗长.filter

var myFilter = [1009,1068,1074,1078,1029,1076,1030,11,1008];
var myData = [
  { "Id":1074, "Name":"sasasa", "SortOrder":0 },
  { "Id":9, "Name":"jkk", "SortOrder":0 },
  { "Id":19, "Name":"pioku", "SortOrder":0 },
  { "Id":5, "Name":"cssxs", "SortOrder":0 },
  { "Id":1009, "Name":"mhmh", "SortOrder":0 }
];
function filterOut(data, filter){
  result = [];
  for (let i = 0; i < data.length; i++){
    if(filter.indexOf(parseInt(data[i].Id)) == -1){
      result.push(data[i]);
    }
  }
  return(result);
}

var output = filterOut(myData, myFilter);
console.log(output);

(请注意,您的预期结果不正确,因为它包含1009,这是您要求过滤掉的 Id 值之一。为简洁起见,我从您的列表中删除了一些数据对象。)

编辑: 我刚刚注意到你的“没有现代 JS”的要求。我想我已经从 ES5 开始删除了任何东西。


推荐阅读