根据允许的项目数组删除 JSON 项
Delete JSON items based on array of allowed items
我有一个允许字段数组,该数组基于从表单生成的JSON数组中的键的名称。
在此阶段不需要许多检索到的字段,因此不应经过验证过程,因此我想将 JSON 数组的值与 allowedFields 数组的值相匹配
从表单返回的 JSON
{"reference":"sdfsdfsdfsd",
"start_date":"04/22/2014",
"end_date":"05//2014",
"status":"1","frequency":"M",
"day":"sat",
"contract_type":"S",
"notice_period":"1M"}
allowedFields = array(
reference,
start_date,
end_date,
contract_type
)
基本上我需要删除任何未在 allowedFields javascript 数组中列出的字段
1) 将 JSON 解析为对象。
var obj = JSON.parse(json);
2) 确保已正确定义数组。
var allowedFields = ['reference','start_date','end_date','contract_type'];
3) 遍历对象,如果键不在数组中,请将其删除。
for (var k in obj) {
if (allowedFields.indexOf(k) < 0) delete obj[k];
}
4) 将对象字符串化回 JSON。
var str = JSON.stringify(obj);
输出
{"reference":"sdfsdfsdfsd","start_date":"04/22/2014","end_date":"05//2014","contract_type":"S"}
小提琴
var all = {"reference":"sdfsdfsdfsd",
"status":"1"};
var allowedFields = ['reference']; // note quote marks to create strings
function filter(data, allowed) {
var filtered = {};
for(var id=0; id < allowed.length; ++id) {
var allowedField = allowed[id];
if(data.hasOwnProperty(allowedField)) {
filtered[allowedField] = data[allowedField];
}
}
return filtered;
}
console.log(filter(all, allowedFields));
>> [object Object] {
>> reference: "sdfsdfsdfsd"
>> }
演示
下划线.js解决方案:
_.pick(obj,allowedFields)
http://underscorejs.org/#pick
演示
也有_.omit(obj,string|string[])
反其道而行之。
underscore.js 非常有用,我经常使用它,但您也可以只选择所需的工具并将其包含在代码中。该库经过了相当优化,无需编写自己的库。
这是实现(从这里开始)
_.pick = function(obj, iterator, context) {
var result = {};
if (_.isFunction(iterator)) {
for (var key in obj) {
var value = obj[key];
if (iterator.call(context, value, key, obj)) result[key] = value;
}
} else {
var keys = concat.apply([], slice.call(arguments, 1));
for (var i = 0, length = keys.length; i < length; i++) {
var key = keys[i];
if (key in obj) result[key] = obj[key];
}
}
return result;
};
相关文章:
- 从组件状态的数组中删除元素
- Mongoose-在更新中删除数组元素
- 从数组中删除元素的最佳方法是:javascript/jquery
- 添加和删除隐藏字段数组中的值,而不提交表单
- 从数组中删除重复条目,并在javascript中按顺序排列
- 一些元素没有从数组中删除
- 删除JS数组中的最小数字
- 从数组中删除三元组项
- 删除重复的数组值,然后存储它们[反应]
- 在特定索引处剥离/删除数组中的值
- 数组删除重复结果Javascript
- 字符串替换或通过数组删除
- js中的对象数组:删除重复项
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 用于垃圾收集的Javascript数组删除
- 为什么”——数组.删除数组的最后一个元素
- PHP循环通过脚本数组&删除项目
- 谷歌地图API:试图使用数组删除多个标记
- 带有for循环+条件的Javascript数组删除不必要的元素
- 在JavaScript中管理像ArrayList这样的数组:删除一个元素并关闭创建的间隙