Javascript-仅保留给定所需属性列表的值
我需要一个函数,给定一个属性列表,只保留该键在列表中存在的值 示例:Javascript-仅保留给定所需属性列表的值,javascript,arrays,json,Javascript,Arrays,Json,我需要一个函数,给定一个属性列表,只保留该键在列表中存在的值 示例: attrs = ['a', 'b', 'c'] obj = {'a': 1, 'b': 2, 'c': 3} return = {'a': 1, 'b': 2, 'c': 3} attrs = ['a', 'b'] obj = {'a': 1, 'b': 2, 'c': 3} return = {'a': 1, 'b': 2} 到目前为止,我已经做到了这一点,但并没有达到预期效果: this.keepKnownAttrib
attrs = ['a', 'b', 'c']
obj = {'a': 1, 'b': 2, 'c': 3}
return = {'a': 1, 'b': 2, 'c': 3}
attrs = ['a', 'b']
obj = {'a': 1, 'b': 2, 'c': 3}
return = {'a': 1, 'b': 2}
到目前为止,我已经做到了这一点,但并没有达到预期效果:
this.keepKnownAttributes = function(attrs, obj) {
let ret = {};
attrs.forEach((attr) => {
if(obj.hasOwnProperty(attr)){
Object.assign(ret, {attr: obj[attr]});
}
});
return ret;
};
使用.hasOwnProperty方法。如果对象具有该属性,则返回true
var attrs=['a','b']
var obj={
"a":1,,
“b”:2,
c:3
}
var obj1={};
attrs.forEache=>obj.hasOwnPropertye?obj1[e]=obj[e]:false
console.logobj1使用.hasOwnProperty方法。如果对象具有该属性,则返回true
var attrs=['a','b']
var obj={
"a":1,,
“b”:2,
c:3
}
var obj1={};
attrs.forEache=>obj.hasOwnPropertye?obj1[e]=obj[e]:false
console.logobj1您可以使用Object.key和.reduce方法:
常量属性1=['a','b','c']
常量obj1={a':1,'b':2,'c':3}
常量属性2=['a','b']
常量obj2={a':1,'b':2,'c':3}
常量filterbj=arr,obj=>Object.keysobj
.filterk=>arr.includesk
.reducer,c=>r[c]=obj[c],r,{}
console.logfilterObjattrs1,obj1;
console.logfilterObjattrs2,obj2 您可以使用Object.keys和.reduce方法:
常量属性1=['a','b','c']
常量obj1={a':1,'b':2,'c':3}
常量属性2=['a','b']
常量obj2={a':1,'b':2,'c':3}
常量filterbj=arr,obj=>Object.keysobj
.filterk=>arr.includesk
.reducer,c=>r[c]=obj[c],r,{}
console.logfilterObjattrs1,obj1;
console.logfilterObjattrs2,obj2 您可以遍历对象的所有键,并将它们存储到包含要删除的键的数组中。稍后,您可以使用delete简单地删除对象的属性。使用Object.keysobj可以获得包含所有键的列表 属性1=['a','b','c'] obj1={ "a":1,, “b”:2, c:3 } 属性2=['a','b'] obj2={ "a":1,, “b”:2, c:3 } keepKnownAttributes=函数trs,obj{ 让keystelete=[]; Object.keysobj.forEachkey=>{ 如果!attrs.includeskey{ keystelete.pushkey; } }; keystedelete.forEachkey=>{ 删除obj[key]; }; 返回obj; }; console.logkeepknow属性属性属性1,obj1;
console.logkeepknownatributesattrs2,obj2 您可以遍历对象的所有键,并将它们存储到包含要删除的键的数组中。稍后,您可以使用delete简单地删除对象的属性。使用Object.keysobj可以获得包含所有键的列表 属性1=['a','b','c'] obj1={ "a":1,, “b”:2, c:3 } 属性2=['a','b'] obj2={ "a":1,, “b”:2, c:3 } keepKnownAttributes=函数trs,obj{ 让keystelete=[]; Object.keysobj.forEachkey=>{ 如果!attrs.includeskey{ keystelete.pushkey; } }; keystedelete.forEachkey=>{ 删除obj[key]; }; 返回obj; }; console.logkeepknow属性属性属性1,obj1; console.logkeepknownatributesattrs2,obj2 你可以用和来做。首先过滤掉属性中存在的键,然后返回包含过滤键及其值的新对象 设obj={'a':1,'b':2,'c':3} 函数removeobj,attrs{ return Object.keysobj.filtera=>attrs.includesa.reduceac,a=>{ ac[a]=obj[a]; 返回ac; },{} } console.logremoveobj,['a','b','c']; console.logremoveobj,['a','b'] 你可以用和来做。首先过滤掉属性中存在的键,然后返回包含过滤键及其值的新对象 设obj={'a':1,'b':2,'c':3} 函数removeobj,attrs{ return Object.keysobj.filtera=>attrs.includesa.reduceac,a=>{ ac[a]=obj[a]; 返回ac; },{} } console.logremoveobj,['a','b','c']; console.logremoveobj,['a','b'] 您可以使用: 作为泛型函数,将如下所示:
const filterAttrsFrom = (target, attrs) =>
attrs.reduce((acc, key) =>
(acc[key] = target[key], acc)
, {});
您可以使用:
作为泛型函数,将如下所示:
const filterAttrsFrom = (target, attrs) =>
attrs.reduce((acc, key) =>
(acc[key] = target[key], acc)
, {});
可以使用从当前的键数组生成新对象:
常量过滤器对象=属性,对象=>
attr.reduceacc,key=>acc[key]=obj[key],acc,{}
logfilterObj['a','b','c'],{'a':1,'b':2,'c':3};
logfilterObj['a','b'],{'a':1,'b':2,'c':3} 可以使用从当前的键数组生成新对象:
常量过滤器对象=属性,对象=>
attr.reduceacc,key=>acc[key]=obj[key],acc,{}
logfilterObj['a','b','c'],{'a':1,'b':2,'c':3};
logfilterObj['a','b'],{'a':1,'b':2,'c':3} 只需使用并传入一个空对象。在每次迭代中,只需将属性从obj复制到累加器,然后返回它
下面的版本添加属性中存在的所有元素
功能测试{
返回属性还原函数累加器,currentValue{
累加器[当前值]=对象[当前值];
回流蓄能器;
}, {};
}
logtest['a','b','c'],{'a':1,'b':2,'c':3};
控制台
e、 logtest['a','b'],{'a':1,'b':2,'c':3};
logtest['a','b','c'],{'a':1,'b':2} 只需使用并传入一个空对象。在每次迭代中,只需将属性从obj复制到累加器,然后返回它
下面的版本添加属性中存在的所有元素
功能测试{
返回属性还原函数累加器,currentValue{
累加器[当前值]=对象[当前值];
回流蓄能器;
}, {};
}
logtest['a','b','c'],{'a':1,'b':2,'c':3};
logtest['a','b',{'a':1,'b':2,'c':3};
logtest['a','b','c'],{'a':1,'b':2} 这也行得通-
函数someNameattrs,obj{
设newObj={};
对于obj中的var对象{
如果attrs.includeObject{
newObj[object]=obj[object];
}
}
返回newObj
}
logsomeName[a,b],{a:1,b:2,c:3} 这也行得通-
函数someNameattrs,obj{
设newObj={};
对于obj中的var对象{
如果attrs.includeObject{
newObj[object]=obj[object];
}
}
返回newObj
}
logsomeName[a,b],{a:1,b:2,c:3};如果ATTR中存在的值在obj中不存在,是否应将其忽略或添加为未定义?如果ATTR中存在的值在obj中不存在,是否应将其忽略或添加为未定义?不确定为什么每次都需要创建新对象并分散关键点。您只需执行acc[key]=obj[key];返回acc;不确定为什么每次都需要创建新对象并传播关键点。您只需执行acc[key]=obj[key];返回acc;