Javascript-删除包含类似名称的属性

Javascript-删除包含类似名称的属性,javascript,Javascript,我有一个json,其中我有类似的属性,如: { "audio_file1": "...", "audio_file2": "...", "audio_file3": "...", "audio_file4": "...", ... } 我正在尝试删除所有属性audio\u fileX。我的第一次尝试是在函数中使用for/loop,该函数接收数组、初始位置和最大文件数 删除属性(如audio\u fileX)最有效的方法是什么?将属性缩减为新对象,如果属性不是以字符串开头,

我有一个json,其中我有类似的属性,如:

{
  "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要慢。