2017-05-26 109 views
1

我有一个包含多个JSON对象的数组。我不需要我文件中的所有键/值,所以我想删除例如所有这些JSON对象上的“Completed”键和它们的值。 我知道我可以通过delete操作员删除特定的键/值对,但在阵列中留下undefined孔。我不希望这样,因为我认为当我使用阵列时它会导致问题。删除多个JSON对象的键/值对

我也有拼接试了一下:

data.splice(data[i].Completed, data.length); 

难道我就与拼接的错误呢?

Acutally我想创建一个新的文件没有特定的键/值。在我的方法中,我只是操作现有文件而不创建新文件...我怎么能这样做?

var data = [ 
{ 
    "ID": 1, 
    "Titel": "ui sketch", 
    "Completed": "yes", 
    "Prio": 3, 
    "Importance": 2 
    }, 
    { 
    "ID": 2, 
    "Titel": "coding", 
    "Completed": "yes", 
    "Prio": 4, 
    "Importance": 4 
    }, 
    { 
    "ID": 5, 
    "Titel": "meeting", 
    "Completed": "no", 
    "Prio": 3, 
    "Importance": 2 
    }, 
] 
+0

[JSON](http://json.org/)objects?真的是弦乐? –

+1

请添加你想要的东西,与删除对象相同的数组,或只是一个没有完成项目的新数组? –

+1

'splice'将用于删除数组数据,而不是您的对象中的键/值。如果你只想删除''Completed':'yes''键/值,而不是包含该值的整个对象,那么'splice'不会执行这个技巧。 – Randy

回答

2

如果您需要删除与关键“已完成”等于所有对象“是”你这样做:

const newData = data.filter(el => el.Completed !== 'yes') 

如果您需要删除的情况下完成所有键它们等于“是” ,你这样做:

const newData = data.map(el => { 
    if (el.Completed === 'yes') delete el.Completed 
    return el; 
}) 

在最常见的情况下,你使用删除的对象和数组使用拼接。

0

我从你的问题中了解到,你想从data阵列中的对象中删除所有Completed属性。

在这种情况下,你可以使用Array.prototype.map(),使一个新的阵列有你想要的属性的对象:

var data = [{"ID": 1,"Titel": "ui sketch","Completed": "yes","Prio": 3,"Importance": 2},{"ID": 2,"Titel": "coding","Completed": "yes","Prio": 4,"Importance": 4},{"ID": 5,"Titel": "meeting","Completed": "no","Prio": 3,"Importance": 2}], 
 
    result = data.map(elem => { 
 
     return { 
 
     ID: elem.ID, 
 
     Titel: elem.Titel, 
 
     Prio: elem.Prio, 
 
     Importance: elem.Importance 
 
     }; 
 
    }); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

谢谢Yosvel。您的解决方案适用于我给出的示例。不幸的是,它似乎不适用于非常大的数据集。 + 50mb ...浏览器无法加载文件... –

0

可以使用Array.prototype.filter()方法:documentation on MDN

这里是什么样子:

var data = [ 
 
{ 
 
    "ID": 1, 
 
    "Titel": "ui sketch", 
 
    "Completed": "yes", 
 
    "Prio": 3, 
 
    "Importance": 2 
 
    }, 
 
    { 
 
    "ID": 2, 
 
    "Titel": "coding", 
 
    "Completed": "yes", 
 
    "Prio": 4, 
 
    "Importance": 4 
 
    }, 
 
    { 
 
    "ID": 5, 
 
    "Titel": "meeting", 
 
    "Completed": "no", 
 
    "Prio": 3, 
 
    "Importance": 2 
 
    }, 
 
] 
 

 
// New array from former one. 
 
var undone = data.filter(obj => obj["Completed"] != "yes"); 
 

 
// Skim data from completed elements 
 
data = data.filter(obj => obj["Completed"] != "yes");

0
var data = [ 
{ 
    "ID": 1, 
    "Titel": "ui sketch", 
    "Completed": "yes", 
    "Prio": 3, 
    "Importance": 2 
    }, 
    { 
    "ID": 2, 
    "Titel": "coding", 
    "Completed": "yes", 
    "Prio": 4, 
    "Importance": 4 
    }, 
    { 
    "ID": 5, 
    "Titel": "meeting", 
    "Completed": "no", 
    "Prio": 3, 
    "Importance": 2 
    }, 
] 

var i =data.length-1; 
for(i ; i>= 0;i--){ 
    if(data[i].Completed == "yes"){ 
     data.splice(i, 1); 
    } 
} 
alert(data[0].Titel); 

在这里你拥有它,搜索完成==“是”,如果是这样,它拼接,你最终用一个数组1元:)希望它可以帮助

0

试试这个:

var data = [ 
 
{ 
 
    "ID": 1, 
 
    "Titel": "ui sketch", 
 
    "Completed": "yes", 
 
    "Prio": 3, 
 
    "Importance": 2 
 
    }, 
 
    { 
 
    "ID": 2, 
 
    "Titel": "coding", 
 
    "Completed": "yes", 
 
    "Prio": 4, 
 
    "Importance": 4 
 
    }, 
 
    { 
 
    "ID": 5, 
 
    "Titel": "meeting", 
 
    "Completed": "no", 
 
    "Prio": 3, 
 
    "Importance": 2 
 
    } 
 
]; 
 

 
var data = data.map(item => { 
 
    return { 
 
    "ID": item.ID, 
 
    "Titel": item.Titel, 
 
    "Prio": item.Prio, 
 
    "Importance": item.Importance 
 
    } 
 
}); 
 

 
console.log(data);