2014-07-11 51 views
1

我有對象和值這一簡單的陣列,但不是所有的對象都具有相同的值:Javascript成爲檢查,如果在陣列對象的值是不存在的

var array = [ 
    {name: '‏aaa', mobile: '111-111'}, 
    {name: '‏bbb', mobile: '222-222', adress: '333-333'}, 
    {name: '‏ccc', mobile: '444-444', adress: '555-555'} 
] 

第一對象不具有地址。

所以,當我試圖將其追加爲html我undefined字:

的jQuery:

$('ul').append(
    '<li>‏'+array[i].name+'</li>'+ 
    '<li>‏'+array[i].mobile+'</li>'+ 
    '<li>‏'+array[i].adress+'</li>'+ 
)} 

HTML:

<li>‏‏aaa</li> 
<li>‏111-111</li> 
<li>‏undefined</li> 

<li>‏‏bbb</li> 
<li>‏222-222</li> 
<li>‏333-333</li> 

如何檢查,如果這值不存在,則不顯示任何內容而不是undefined字?或甚至不顯示整個li標籤?

JSFiddle DEMO

回答

2

JavaScript有固有的布爾值,通常被稱爲任truthy或falsy。未分配的值將在if語句中返回false,例如 if(array[i].adress){ 我在代碼中添加了一條速記if語句來解決該問題。

function details() { 
$('ul').append(
    '<li>‏'+array[i].name+'</li>'+ 
    '<li>‏'+array[i].mobile+'</li>'+ 
    (array[i].adress? '<li>‏'+ array[i].adress +'</li>': '') 
); 
} 
+1

你的'如果'比我好。我忘了'undefined'是'falthy'。 –

+0

Thnk你@Bryan,這就是我想要的:) –

3

你需要設置它的ADRESS仍然但是' '值。

var array = [ 
    {name: '‏aaa', mobile: '111-111',adress:''}, 
    {name: '‏bbb', mobile: '222-222', adress: '333-333'}, 
    {name: '‏ccc', mobile: '444-444', adress: '555-555'} 
] 

編輯

解決方案2

檢查,如果array[i].adresstypeofUndefined

function details() { 
    if(typeof array[i].adress == "undefined"){ 
     array[i].adress = ''; 
    } 
    $('ul').append(
     '<li>‏'+array[i].name+'</li>'+ 
     '<li>‏'+array[i].mobile+'</li>'+ 
     '<li>‏'+array[i].adress+'</li>'+ 
     '<br />' 
    ); 
} 

小提琴更新:Working Demo

+0

我有幾百個元素和每個元素約15個值,所以我不能手動更改它們 –

+1

謝謝,現在它的工作原理.. –

0

檢查這一個

if (array[i].adress==null) 
{ 
    array[i]['adress'] = 'None'; 
} 
$('ul').append(
    '<li>‏'+array[i].name+'</li>'+ 
    '<li>‏'+array[i].mobile+'</li>'+ 
    '<li>‏'+array[i].adress+'</li>'+ 
    '<br />' 
); 
+0

以這種方式,一個沒有地址值的元素的所有值都將消失,而不是我想要的 –

+0

嘗試這一個西米莉你可以添加其他如果對於名稱和移動 –

1

您可以使用這樣的事情:

function details() { 
    $('ul').append(
     '<li>‏'+array[i].name+'</li>'+ 
     '<li>‏'+array[i].mobile+'</li>'+ 
     (typeof(array[i].adress) === 'undefined' ? '' : 
     ('<li>‏'+array[i].adress+'</li>')) + 
     '<br />' 
    ); 
} 

我用三元if與檢查address屬性是否被定義的條件。否則,整個<li>被省略。

SQL Fiddle

+0

這是一個工作解決方案,謝謝 –

1

啥子你正在尋找的是這樣的:http://jsfiddle.net/Z7U3r/

的hasOwnProperty()方法返回一個布爾值,指示 對象是否具有指定的財產。

希望這會適合您的需要:)

代碼

array[i].hasOwnProperty('adress')

+0

mmm,但是這個節目'false'而不是'undefined'! –

+1

@AhmadSeraj是的,這就是爲什麼這個'hasOwnProperty'方法存在。當這種方法爲你做的時候,不需要做未加工的「未定義」的折扣。並在最佳狀態下它可能會更快':)'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty –

3

嘗試

var array = [ 
    {name: '‏aaa', mobile: '111-111'}, 
    {name: '‏bbb', mobile: '222-222', adress: '333-333'}, 
    {name: '‏ccc', mobile: '444-444', adress: '555-555'} 
]; 

$.each(array, function(index, value) { 
    $.each(value, function(key, val) { 
     $("<li>", { 
      "text": val 
     }).appendTo("ul") 
    }); 
}); 

的jsfiddle http://jsfiddle.net/guest271314/mU9T5/

+1

是的,這在某些方面非常優雅。 +1 –

+0

偉大的解決方案。 +1([[在li之間的中斷處添加](http://jsfiddle.net/mU9T5/1/)) – crashwap

相關問題