2017-05-26 59 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);