Javascript-删除包含类似名称的属性
我有一个json,其中我有类似的属性,如:Javascript-删除包含类似名称的属性,javascript,Javascript,我有一个json,其中我有类似的属性,如: { "audio_file1": "...", "audio_file2": "...", "audio_file3": "...", "audio_file4": "...", ... } 我正在尝试删除所有属性audio\u fileX。我的第一次尝试是在函数中使用for/loop,该函数接收数组、初始位置和最大文件数 删除属性(如audio\u fileX)最有效的方法是什么?将属性缩减为新对象,如果属性不是以字符串开头,
{
"audio_file1": "...",
"audio_file2": "...",
"audio_file3": "...",
"audio_file4": "...",
...
}
我正在尝试删除所有属性audio\u fileX
。我的第一次尝试是在函数中使用for/loop
,该函数接收数组、初始位置和最大文件数
删除属性(如
audio\u fileX
)最有效的方法是什么?将属性缩减为新对象,如果属性不是以字符串开头,则每次Reduce迭代都会将属性扩展为新结果,或者返回以前的结果而不包含属性
removeBetterPerformance做了同样的事情,但改变了先前的结果以获得更好的性能,但牺牲了功能纯度。对于少数属性,这是不必要的
让obj={
音频文件1:“…”,
音频文件2:“…”,
音频文件3:“…”,
音频文件4:“…”,
其他:“…”
};
常量删除=(对象,str)=>
Object.getOwnPropertyNames(obj).reduce(
(result,property)=>(property.startsWith(str)?结果:{……结果,[property]:obj[property]}),
{}
);
log(删除(obj,“音频文件”);
const removeBetterPerformance=(obj,str)=>
Object.getOwnPropertyNames(obj).reduce((结果,属性)=>{
如果(!property.startsWith(str)){
结果[属性]=对象[属性];
}
返回结果;
}, {});代码>将属性缩减为一个新对象,如果属性不是以字符串开头,则每次Reduce迭代要么将属性扩展为一个新结果,要么返回没有属性的前一个结果
removeBetterPerformance做了同样的事情,但改变了先前的结果以获得更好的性能,但牺牲了功能纯度。对于少数属性,这是不必要的
让obj={
音频文件1:“…”,
音频文件2:“…”,
音频文件3:“…”,
音频文件4:“…”,
其他:“…”
};
常量删除=(对象,str)=>
Object.getOwnPropertyNames(obj).reduce(
(result,property)=>(property.startsWith(str)?结果:{……结果,[property]:obj[property]}),
{}
);
log(删除(obj,“音频文件”);
const removeBetterPerformance=(obj,str)=>
Object.getOwnPropertyNames(obj).reduce((结果,属性)=>{
如果(!property.startsWith(str)){
结果[属性]=对象[属性];
}
返回结果;
}, {});
为了避免使用扩展语法的开销…
从其他答案中,我建议您使用函数Object.assign
const obj={“audio_file1”:“…”、“audio_file2”:“…”、“audio_file3”:“…”、“audio_file4”:“…”、“myown”:“Ele”},
start=“音频文件”,
result=Object.keys(obj).reduce((a,c)=>c.startsWith(start)?a:Object.assign(a,{[c]:obj[c]}),Object.create(null));
控制台日志(结果)
为了避免使用扩展语法的开销…
从其他答案中,我建议您使用函数Object.assign
const obj={“audio_file1”:“…”、“audio_file2”:“…”、“audio_file3”:“…”、“audio_file4”:“…”、“myown”:“Ele”},
start=“音频文件”,
result=Object.keys(obj).reduce((a,c)=>c.startsWith(start)?a:Object.assign(a,{[c]:obj[c]}),Object.create(null));
控制台日志(结果)代码>根据您的问题,很难判断您是在使用JSON(如您所说)还是JavaScript对象
对于这个答案,我假设您以某种方式导入了JSON,并通过JSON.parse()
将其转换为JavaScript对象
因此,如果你不去想这个问题,你只剩下:
const obj = {
audio_file1 : "...",
audio_file2 : "...",
audio_file3 : "...",
audio_file4 : "...",
...
};
从这里,您希望遍历对象并找到包含字符串“audio_file”的键,然后将它们从对象中删除
下面是一个片段,演示了如何使用ES6方法实现这一点:
const obj={
音频文件1:“…”,
音频文件2:“…”,
音频文件3:“…”,
音频文件4:“…”,
};
用于(输入obj){
if(key.startsWith('audio_file')){
删除(obj[key]);
}
}
控制台日志(obj)代码>根据您的问题,很难判断您是在使用JSON(如您所说)还是JavaScript对象
对于这个答案,我假设您以某种方式导入了JSON,并通过JSON.parse()
将其转换为JavaScript对象
因此,如果你不去想这个问题,你只剩下:
const obj = {
audio_file1 : "...",
audio_file2 : "...",
audio_file3 : "...",
audio_file4 : "...",
...
};
从这里,您希望遍历对象并找到包含字符串“audio_file”的键,然后将它们从对象中删除
下面是一个片段,演示了如何使用ES6方法实现这一点:
const obj={
音频文件1:“…”,
音频文件2:“…”,
音频文件3:“…”,
音频文件4:“…”,
};
用于(输入obj){
if(key.startsWith('audio_file')){
删除(obj[key]);
}
}
控制台日志(obj)
OP可能希望开始使用
。这样做的缺点是,spread操作符…
将反复复制属性<减速机中的code>Object.assign
可能更有效。扩展运算符在功能上是纯的,而Object.assign则不是。性能只会成为大量属性的一个问题。OP可能希望使用启动。这样做的缺点是,排列运算符…
将一遍又一遍地复制属性<减速机中的code>Object.assign
可能更有效。扩展运算符在功能上是纯的,而Object.assign则不是。性能只会是大量物业的一个问题。这实际上比使用spread要慢。这实际上比使用spread要慢。