javascript - 如何通过传递 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,1077
ids(逗号分隔)传递给需要从 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 浏览器中不起作用。
解决方案
这可以解决问题。可以使用 Array 方法(如.map
or )来减少冗长.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 开始删除了任何东西。
推荐阅读
- c++ - C++:当我使用文件描述符从日志文件中读取时,识别日志文件何时被移动/重命名/删除
- ios - CAGradientLayer:其他 UIObjects 没有出现
- javascript - 从数组中获取字符串?
- windows - Git 一次克隆一点点或其他解决方案
- matlab - 从 MATLAB 中的结构体字段的实例开始构建矩阵
- reactjs - 为 iOS 运行任何 React-Native 项目都会导致“无法解析模块”错误
- sql - 基于三个不同的分类变量创建相似的样本
- c# - 将 System.Timer 添加到 System.Threading.RegisterWaitForSingleObject
- reactjs - 无法使用可创建的反应选择显示值
- sql - 将数据表列分配给图表列颜色