2017-09-07 54 views
4

我JSON數組在API加載如何刪除是不確定的JSON對象

我打電話給他們使用

categories.map((i,j) =>{ 
    return (<Tab label={'' + i.Name} key={j}/>); 
}) 

它顯示爲時尚,健康,不確定的,不確定的,不確定的,因爲從141到321的數字是不確定的。

如何防止undefined在答案中打印?謝謝。

+0

你想,而不是打印呢?空字符串的名稱或根本沒有標籤? – Chris

+0

根本沒有標籤。只是時尚健康。 – PremKumar

+1

有人在沒有任何解釋的情況下低估了每一個答案......很好。 – Chris

回答

3

可以有條件地返回它:

categories.map((i,j) =>{ 
    return (i.svcName && <Tab label={'' + i.svcName} key={j}/>); 
}) 

UPDATE
陣營例如:

const arr = [{ 
 
    val: 1 
 
    }, 
 
    { 
 
    val: 2 
 
    }, 
 
    { 
 
    val: false 
 
    }, 
 
    { 
 
    val: '' 
 
    }, 
 
    { 
 
    noval: 'blahh' 
 
    }, 
 
    { 
 
    val: 3 
 
    }, 
 
    { 
 
    val: undefined 
 
    }, 
 
    { 
 
    val: 4 
 
    }, 
 
] 
 

 
const Tab = ({ value }) => <div className="tab">{value}</div>; 
 

 
class App extends React.Component { 
 
    render() { 
 
    return(
 
     <div> 
 
     { 
 
     arr.map((obj, i) => obj.val && <Tab value={obj.val} key={i} />) 
 
     } 
 
     </div> 
 
    ); 
 
    } 
 
} 
 
ReactDOM.render(<App/>, document.getElementById('root'));
.tab{ 
 
    height: 50px; 
 
    width: 100px; 
 
    display:inline-block; 
 
    background-color: #333; 
 
    color:#fff; 
 
    text-align:center; 
 
    border: 1px solid #fff; 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="root"></div>

編輯
0在他的回答中提到作爲@克里斯,我的做法會排除falsy valuesnullundefined""0NaN

+1

這應該是被接受的答案。 – Chris

2

您必須首先檢查是否值不是未定義的陣列中的每個項目:

categories.map((i,j) =>{ 
    return (i.svcName !== undefined && <Tab label={'' + i.svcName} key={j}/>); 
}); 

這明確地將檢查svcNameundefined,但是null,空字符串或任何其他falsy值將通過評估。

如果你想檢查falsy值,去@ Sag1v的建議。

+0

是的,我做了檢查虛假,因爲這個屬性名稱'svcName'意味着它應該持有一個字符串(不是空的),並通過OP的例子,我想他想要呈現一個帶有標題的標籤。所以渲染falsy值沒有意義。但你寫了一個關於它的重要解釋。我想我應該把它加在我的回答上 –

+0

是的,它說。 TypeError:無法讀取null – PremKumar

+2

@ Sag1v的屬性'props',正確。但考慮到OP的問題,我想我會添加一個答案,明確檢查「undefined」,因爲你已經覆蓋了僞造值。未來可能的讀者可能會在尋找未定義的而不是錯誤的,因此我發佈了這個。 – Chris

0

如果你不想地圖功能的結果一樣[el, el, el, false, el, el]你應該使用前過濾:

categories.filter(el => el.svcName !== undefined).map((i,j) =>{ 
    return (<Tab label={'' + i.svcName} key={j}/>); 
}) 
+2

雖然這會產生所需的輸出,但您實際上正在循環陣列兩次,這可能不合需要。 – Chris

+0

但是你不會有像'[el,el,el,false,el,el]這樣的地圖的結果' – Andrew

+0

你會返回像'false'這樣的虛假值和空字符串等等+你正在進行雙重迭代 –

0

隨着Array#Filter & Array#Map

categories.filter(i => i.svcName !== undefined).map((x,i) => <Tab label={'' + x.svcName} key={i}/>); 
+1

您將返回像空字符串等falsy值+您正在進行雙重迭代 –

+0

@ Sag1v。好,謝謝。你是對的。但仍然不明白爲什麼我的答案是dvoted? –

+0

我不知道,反正也不是我。 –