[英]Removing unwanted object keys & undefined in Javascript?
這是我的數組:
const
array1 = [
{
"value": "0",
"name": "5",
"waste": "remove",
"city": "NY"
},
{
"value": "0",
"name": "51",
"waste": "remove",
}
]
所以現在,我想刪除某些並用對象組成一個新數組:例如,我需要刪除“Waste & value”並保留 rest 的東西,所以我使用了這個代碼:
var keys_to_keep = ['name', 'city']
const result = array2.map(e => {
const obj = {};
keys_to_keep.forEach(k => obj[k] = e[k])
return obj;
});
console.log(result)
它給出了 output 作為
[ { name: '5', city: 'NY' }, { name: '51', city: undefined } ]
現在您可以看到具有未定義值的城市,如何刪除它? 我的意思是過濾這個並只顯示具有值的鍵,
所以我的問題是如何過濾未定義的,還有沒有其他更好的解決方案來刪除不需要的 object 鍵並顯示帶有所需鍵的新數組? 或者正在使用的方法是否足夠高效?
您可以檢查您的 forEach 中的值是否未定義:
const result = array2.map(e => {
const obj = {};
keys_to_keep.forEach(k => {
if (undefined !== e[k]) {
obj[k] = e[k]
}
)
return obj;
});
您可以通過使用.hasOwnProperty()
檢查e
object 是否具有屬性k
來檢查是否在將e[k]
添加到obj
之前對其進行了定義:
const array = [{ "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ]; const keys_to_keep = ['name', 'city']; const result = array.map(e => { const obj = {}; keys_to_keep.forEach(k => { if (e.hasOwnProperty(k)) obj[k] = e[k] }); return obj; }); console.log(result)
如果您要刪除的鍵不是動態的,您還可以使用解構賦值來提取您要丟棄的屬性,並使用 rest 語法獲取沒有這些屬性的 object:
const array = [{ "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ]; const result = array.map(({value, waste, ...r}) => r); console.log(result)
我將回答這兩個部分。 因此,這是執行此操作的步驟。
map()
。Object.entries()
獲取每個 object 的條目。filter()
刪除那些 key 不存在於keys_to_keep
中的整體現在是第二部分。
keys_to_keep
創建一個 object,其中包含每個鍵的未定義值。map()
並使用 Spread 運算符。 首先傳播上面創建的object,然后傳播原始值。 這樣,如果找不到任何鍵,它將被設置為undefined
const array1 = [ { "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove", } ] var keys_to_keep = ['name', 'city'] let obj = Object.fromEntries(keys_to_keep.map(x => [x, undefined])); const res = array1.map(obj => Object.fromEntries( Object.entries(obj).filter(([k, v]) => keys_to_keep.includes(k)))).map(x => ({...obj, ...x})) console.log(res)
You can use .map
to iterate over the objects, Object.entries
to get the key-value pairs of each item, Object.fromEntries
to group them into the resulting objects, and .filter
to get only the entries with a key
in keys_to_keep
and一個undefined
的value
:
const array1 = [ { "value": "0", "name": "5", "waste": "remove", "city": "NY" }, { "value": "0", "name": "51", "waste": "remove" } ]; var keys_to_keep = ['name', 'city']; const result = array1.map(item => Object.fromEntries( Object.entries(item).filter(([key, value]) => keys_to_keep.includes(key) && value;== undefined ) ) ). console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.