簡體   English   中英

如何在JavaScript對象中刪除具有相同鍵的所有元素

[英]How to remove all elements with the same key in JavaScript object

我正在使用如下JavaScript對象中的JSON數據:

var data = [
{ "City" : "New York",    "State" : "New York"     },
{ "City" : "Fargo",       "State" : "North Dakota" },
{ "City" : "Los Angeles", "State" : "California"   }
];

我想刪除狀態數據,使其最終如下所示:

var data = [
{ "City" : "New York"},
{ "City" : "Fargo"},
{ "City" : "Los Angeles"}
];

目前,我正在遍歷並刪除它,但是有沒有一種方法可以從對象中刪除城市而不必遍歷?

我找到了“刪除”運算符(“刪除運算符從對象中刪除屬性。”),但它似乎僅在只有一個具有該屬性的項目時才起作用,而不是像示例對象那樣在全局范圍內起作用。

delete object["State"] //doesn't work

編輯:我不好。 我復制/粘貼和編輯不正確。 我已將原始帖子更改為使用Polywhirl先生的答復中提供的正確格式。

編輯:我最終使用了mccainz建議的map方法。 使用map可以將某個鍵/值對(例如城市)中的全部從一個數組拉到另一個數組。 您也可以拉多個

newData = data
.map(function(v){
return {City:v.City, State:v.State}; 
});

它會滿足我的目的,並且會更好,因為我保留了少數鍵/值對。 但是,在原始問題中似乎沒有任何解決方案可以執行任務。 例如,如果每個數組項有100個不同的鍵/值對,則必須將99個添加到新數組中,而不僅僅是從現有數組中刪除一個。

您應該將數據轉換為對象數組,然后簡單地對該數組進行操作。 下面的示例使用array.map返回不帶State屬性的數組。 但是,有很多方法可以給這只貓蒙皮。

(已編輯,以演示地圖之前的過濾預處理)

var data=[];

data.push({"City":"New York","State":"New York"});
data.push({"City":"Fargo","State":"North Dakota"});
data.push({"City":"Los Angeles","State":"California"});

var newData;

newData = data
  .filter(function(v){
    return v.State !=='California';
  })
  .map(function(v){
    return {City:v.City};
  });

Array.prototype.filter
Array.prototype.map

正如其他人指出的那樣,您的JSON對象中不能有重復的屬性。 您的數據應該放在一個數組中,而不是一個怪物對象中。

如果您不想修改原始對象,則可以結合使用map和reduce來創建過濾對象。

 var data = [ { "City" : "New York", "State" : "New York" }, { "City" : "Fargo", "State" : "North Dakota" }, { "City" : "Los Angeles", "State" : "California" } ]; var filterKeys = function(data, keysToFilter) { return data.map(function(item) { return Object.keys(item).reduce(function(result, key) { if (keysToFilter.indexOf(key) === -1) result[key] = item[key]; return result; }, {}); }); } document.body.innerHTML = JSON.stringify(filterKeys(data, ['State']), null, ' '); 
 body { font-family: monospace; white-space: pre; } 

結果

[
  { "City": "New York" },
  { "City": "Fargo" },
  { "City": "Los Angeles" }
]

您不能使用兩個相同的keys啟動對象。例如

var obj={city:"NEW YORK",city:"NEW JERSEY"}

city物業將持有NEW JERSEY因為它已被覆蓋。

JSON.stringify(obj); // {"city":"NEW JERSEY"}

如果您使用json初始化對象,那么obj1將僅包含一個citystate屬性。

   JSON.stringify(obj1); //{"City":"Fargo","State":"North Dakota"}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM