簡體   English   中英

如何從 javascript 中的 json object 中刪除“1 個空項目”

[英]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。

使用Array.prototype.splice()

刪除空數組或空 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.

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