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

时间:2018-09-27 01:30:11

标签: javascript

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

{
  "audio_file1": "...",
  "audio_file2": "...",
  "audio_file3": "...",
  "audio_file4": "...",
  ...
 }

我正在尝试删除所有属性audio_fileX。我的第一次尝试是在函数中使用for/loop来接收数组,初始位置和最大文件数。

删除audio_fileX之类的属性的最有效方法是什么?

3 个答案:

答案 0 :(得分:2)

为避免在其他答案中使用spread syntax ...造成开销,建议您使用函数Object.assign

const obj = {  "audio_file1": "...",  "audio_file2": "...", "audio_file3": "...",  "audio_file4": "...",  "myown": "Ele"},
      start = "audio_file",
      result = Object.keys(obj).reduce((a, c) =>  c.startsWith(start) ? a : Object.assign(a, {[c]: obj[c]}), Object.create(null));
      
console.log(result);

答案 1 :(得分:1)

将属性归约到新对象中,如果属性不是以字符串开头的,则reduce的每次迭代都会将属性传播到新结果中,或者不包含字符串而返回先前的结果。

removeBetterPerformance可以执行相同的操作,但会更改先前的结果以获得更好的性能,但会牺牲功能纯度。对于少量属性来说,这是不必要的。

let obj = {
  audio_file1: "...",
  audio_file2: "...",
  audio_file3: "...",
  audio_file4: "...",
  other: "..."
 };
 
 const remove = (obj, str) =>
    Object.getOwnPropertyNames(obj).reduce(
      (result, property) => (property.startsWith(str) ? result : { ...result, [property]: obj[property] }),
      {}
    );
 
 console.log(remove(obj, 'audio_file'));
 
 const removeBetterPerformance = (obj, str) =>
    Object.getOwnPropertyNames(obj).reduce((result, property) => {
      if (!property.startsWith(str)) {
        result[property] = obj[property];
      }
      return result;
    }, {});

答案 2 :(得分:0)

从您的问题出发,很难判断您是使用JSON(如您所说的)还是使用JavaScript对象。

对于这个答案,我假设您以一种方式导入了JSON,并已通过JSON.parse()将其转换为JavaScript对象。

因此,要摆脱它,您将剩下:

const obj = {
    audio_file1 : "...",
    audio_file2 : "...",
    audio_file3 : "...",
    audio_file4 : "...",
    ...
};

从这里开始,您要遍历对象,找到包含字符串“ audio_file”的键,并将其从对象中删除。

下面的代码片段演示了如何使用ES6方法实现这一目标:

const obj = {
  audio_file1 : "...",
  audio_file2 : "...",
  audio_file3 : "...",
  audio_file4 : "...",
};

for (let key in obj) {

  if (key.startsWith('audio_file')) {
  
    delete(obj[key]);
    
  }

}

console.log(obj);

要对此进行简要说明,代码将遍历对象的每个键,并检查它是否以“ audio_file”开头,如果是,则将其删除。您可以看到控制台最终记录了一个空对象,因为所有当前键都以该字符串开头。