Javascript 根据允许的项目数组删除JSON项目
我有一个allowedFields数组,它基于表单生成的JSON数组中键的名称 许多检索到的字段在此阶段不是必需的,因此不应经过验证过程,因此我希望将JSON数组的值与allowedFields数组的值相匹配 从表单返回JSONJavascript 根据允许的项目数组删除JSON项目,javascript,arrays,json,Javascript,Arrays,Json,我有一个allowedFields数组,它基于表单生成的JSON数组中键的名称 许多检索到的字段在此阶段不是必需的,因此不应经过验证过程,因此我希望将JSON数组的值与allowedFields数组的值相匹配 从表单返回JSON {"reference":"sdfsdfsdfsd", "start_date":"04/22/2014", "end_date":"05//2014", "status":"1","frequency":"M", "day":"sat", "contract_type
{"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数组中未列出的任何字段var all={“reference”:“sdfsd”,
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"
>> }
“状态”:“1”};
var allowedFields=['reference'];//请注意引号以创建字符串
函数过滤器(数据,允许){
var-filtered={};
对于(变量id=0;id>[对象]{
>>参考:“SDFSD”
>> }
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];
}
输出
{"reference":"sdfsdfsdfsd","start_date":"04/22/2014","end_date":"05//2014","contract_type":"S"}
下划线.js解决方案:
_.pick(obj,allowedFields)
还有一个.omit(obj,string | string[])
的作用正好相反
Underline.js非常有用,我经常使用它,但您也可以选择所需的工具并将其包含在代码中。该库经过了充分优化,无需编写自己的库
这是实现(来自)
\uux.pick=函数(对象、迭代器、上下文){
var result={};
if(u.isFunction(迭代器)){
for(obj中的var键){
var值=obj[键];
if(iterator.call(context,value,key,obj))result[key]=value;
}
}否则{
var keys=concat.apply([],slice.call(参数,1));
for(var i=0,length=keys.length;i
_.pick(obj,allowedFields)
_.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;
};