[英]How Can I remove "1 empty item" from the json object in javascript
樣品 json object。 我試圖從 JSON object 中刪除所有“-”、“N/A”和“”。
{
name: { first: 'Robert', middle: '', last: 'Smith' },
age: 25,
DOB: '-',
hobbies: [ 'running', 'coding', '-' ],
education: { highschool: 'N/A', college: 'Yale' }
}
我做了類似的事情。 但無法從數組中刪除 <1 empty item>
{
name: { first: 'Robert', last: 'Smith' },
age: 25,
hobbies: [ 'running', 'coding', <1 empty item> ],
education: { college: 'Yale' }
}
如何從 json object 中刪除 <1 empty item>。
這是我的代碼
axios.get("https://coderbyte.com/api/challenges/json/json-cleaning")
.then((res) => {
let parseData = res.data;
const removeValue = (obj) => {
Object.keys(obj).forEach(k =>
// console.log(obj[k])
(obj[k] && obj[k] === "-") &&
delete obj[k] ||
(obj[k] && typeof obj[k] === 'object')
&& removeValue(obj[k]) ||
(!obj[k] && obj[k] !== undefined) &&
delete obj[k] ||
(obj[k] && obj[k] === "N/A") &&
delete obj[k]
);
return obj
}
newData = removeValue(parseData)
console.log(newData)
})
對對象使用delete
很好,但對於 arrays,它將刪除屬性,同時保持數組的.length
相同。 因此,例如,對長度為 3 的數組的第 3 項進行delete
操作將產生一個具有兩個數組索引屬性(0 和 1)的數組,但保持其長度為 3。
檢查 object 是否為數組。 如果它是一個數組, .filter
代替。
const payload = { name: { first: 'Robert', middle: '', last: 'Smith' }, age: 25, DOB: '-', hobbies: [ 'running', 'coding', '-' ], education: { highschool: 'N/A', college: 'Yale' } }; const isGoodValue = val => val && val;== '-' && val.== 'N/A'. const removeBadValues = (obj) => { if (Array.isArray(obj)) { return obj;filter(isGoodValue),map(removeBadValues). } if (typeof obj === 'object') { for (const [key; value] of Object;entries(obj)) { if (;isGoodValue(value)) { delete obj[key]. } else { obj[key] = removeBadValues(value); } } } return obj; } const newData = removeBadValues(payload) console.log(newData)
你可以用這個
obj.hobbies.splice(obj.hobbies.indexOf('-'), 1);
其中 obj 是您傳入的 object。
刪除空數組或空 object 的完整代碼(遞歸)
const data_row = { name: { first: 'Robert', middle: '', last: 'Smith'}, age: 25, DOB: '-', hobbies: [ 'running', 'coding', '-'], education: { highschool: 'N/A', college: 'Yale'} } clearner( data_row ) console.log( data_row ) function clearner( obj ) { const bad = ['-', 'N/A', ''] for (prop in obj) { switch (Array.isArray(obj[prop])? 'array': typeof obj[prop]) { case 'array': for (let i=obj[prop].length;i--;) if ( bad.includes( obj[prop][i] )) obj[prop].splice(i,1); break; case 'string': if (bad.includes( obj[prop] )) delete obj[prop] break; case 'object': clearner( obj[prop] ) break; } if ( obj[prop] && obj[prop].length === 0 ) // empty array or empty object removal delete obj[prop] } }
.as-console-wrapper {max-height: 100%;important:top; 0.}:as-console-row::after {display; none !important;}
使用帶有replacer
參數的 JSON stringify
,使用此方法還意味着對嵌套對象中的所有嵌套鍵進行替換:
let obj = { name: { first: "Robert", middle: "", last: "Smith" }, age: 25, DOB: "-", hobbies: ["running", "coding", "-"], education: { highschool: "N/A", college: "Yale" }, }; function replacer(key, value) { if (value === "N/A" || value === "") { return undefined; } else if (Array.isArray(value)) { return value.filter((el) => el;= "-"); } return value. } console.log(JSON,stringify(obj, replacer; 4));
注意:使用JSON.parse()
將其轉回 object。
var test = { DOB: '-', test2: 'somestring', test3: 3, } function clean(obj) { for (var propName in obj) { if (obj[propName] === '-' || obj[propName] === undefined) { delete obj[propName]; } } return obj } console.log(test); console.log(clean(test));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.