从javascript中包含下划线的对象数组返回所有键:值对
我有一些行包含如下格式的数据:从javascript中包含下划线的对象数组返回所有键:值对,javascript,Javascript,我有一些行包含如下格式的数据: { id:"id", param:"street1", param:"street2", param_eu:"street", param_ru:"street", }, { id:"id2", param:"street1", param:"street2", param_fr:&quo
{
id:"id",
param:"street1",
param:"street2",
param_eu:"street",
param_ru:"street",
},
{
id:"id2",
param:"street1",
param:"street2",
param_fr:"street",
param_cz:"street",
},
{
eu:"street",
ru:"street"
},
{
fr:"street",
cz:"street"
},
我只想选择包含“_”且仅将国家/地区保留为关键字名称的配对,如下所示:
{
id:"id",
param:"street1",
param:"street2",
param_eu:"street",
param_ru:"street",
},
{
id:"id2",
param:"street1",
param:"street2",
param_fr:"street",
param_cz:"street",
},
{
eu:"street",
ru:"street"
},
{
fr:"street",
cz:"street"
},
设法用多个内部for循环完成了它,但这是巨大的。有更好的解决方案吗?您可以迭代列表,每次都减少对象属性:
const数据=[
{id:“id”,param:“street1”,param:“street2”,param_eu:“street”,param_ru:“street”},
{id:“id2”,param:“street1”,param:“street2”,param_fr:“street”,param_cz:“street”}
];
//迭代对象
const res=数据减少((国家,项目)=>{
//减少对象属性
const itemWithCountries=Object.entries(项)
.reduce((acc,[键,值])=>{
if(key.includes(“”“))acc[key.split(“”“).pop()]=值;
返回acc;
}, {});
//减推力物体
if(Object.keys(itemWithCountries).length>0)countries.push(itemWithCountries);
返回国;
}, []);
控制台日志(res)代码>您可以通过从对象中获取所有条目来映射新对象,获取所需的条目并从条目中将对象构建为新对象
const
数组=[{id:“id”,参数:“street1”,参数:“street2”,参数eu:“street”,参数ru:“street”},{id:“id2”,参数:“street1”,参数:“street2”,参数fr:“street”,参数cz:“street”},
结果=array.map(对象=>object.fromEntries(对象
.条目(对象)
.filter(([key])=>key.includes(“”)
));
控制台日志(结果)代码>您可以首先在阵列上使用,将每个对象映射到新对象。新对象是使用、和.map()
创建的。您可以按如下方式使用这些方法:
使用Object.entries()
从对象中获取[[key,value],…]
对数组
在上面的键值对数组中,使用.filter()
通过检查键是否为下划线“quot
过滤完数组后,在过滤的键值数组上使用.map()
,将每个内部数组(即:[key,value]
)映射到一个新数组,在该数组中删除下划线左侧的所有内容。要做到这一点,您可以使用“quot
键来形成一个由两部分组成的数组-“param”
和alpha国家代码。您可以使用获取部件数组中的最后一个字符串(即:alpha国家代码)
在调用Object.fromEntries()
时,将此筛选/映射的键值对数组包装起来。由于这需要一个包含[[key,value],…]
对的数组,因此它将能够为您构建一个对象,其中每个内部[key,value]
数组将转换为结果对象中的{key:value,…}
见下例:
const arr=[{id:“id”,param:“street1”,param:“street2”,param_eu:“street”,param_ru:“street”,},{id:“id2”,param:“street1”,param:“street2”,param_fr:“street”,param_cz:“street”,}];
常数res=arr.map(
obj=>Object.fromEntries(
Object.entries(obj.filter)(
([key])=>key.includes(“quo”)
).map(([key,val])=>[key.split(“”).pop(),val])
)
);
控制台日志(res)代码>向我们展示代码(您的尝试)熟悉并使用可用的和方法(静态和原型)。有人会告诉您使用reduce
。别这样,这只是增加了复杂性。使用map
并在回调中为in
循环使用(或为对象上的
键使用map
),或在回调使用对象的地方使用映射。(在后者中,还需要另一个map
来更改键值,因此循环可能更简单。)