2016-07-05 69 views
0

我試圖得到一個最終的輸出如這從一個函數返回一個數組解析錯誤的函數?

[{'visible': false},null,null,null,null,{'visible': false}] 

這基本上是我需要隱藏的列的列表。所以我需要編寫一個函數,如果我解析應該是可見的列的列表,它應該返回給我一個如上的數組。因此,這就是我正在嘗試做的事情,我也能夠得到這個工作,但是我想知道這是否是最佳和最佳的方式來做到這一點?

請求您的幫助。爲一些錯別字道歉,這是我的第一篇文章。

// array of columns to be shown 
var arr = ["last_name", "phone", "email", "address"]; 
toggleVis(arr); 

function toggleVis(arr) { 
    //list of all the columns. 
    arr_columns = ["name", "last_name", "phone", "email", "address", "company"]; 
    arrayLength = arr.length; 
    arr_columnsLength = arr_columns.length; 
    var arr_new = []; 
    for (var i = 0; i < arr_columnsLength; i++) { 
    for (var j = 0; j < arrayLength; j++) { 
     if (arr_columns[i] == arr[j]) { 
     arr_new[i] = "null"; 
     break; 
     } else { 
     arr_new[i] = "{'visibilty:false'}"; 
     } 
    } 
    } 
} 
+0

也許你應該在問這個問題[代碼審查](http://codereview.stackexchange.com/) –

+0

你的代碼似乎很好,除了你需要返回一個不是字符串的對象,像這樣:'arr_new [i] = {visibilty:false} ;' –

回答

0

首先你的代碼總體上看起來不錯。我注意到的唯一問題是,你應該return在你的函數新的數組,你應該使用對象和null而不是字符串分別當陣列中沒有找到列名:

arr_new[i] = { visibilty: false }; 

話雖這麼說你可以使代碼更簡潔的使用indexOf,而不是第二for循環的檢查,如果列名傳遞的數組中存在,是這樣的:

function toggleVis(arr) { 
    var arr_columns = ["name", "last_name", "phone", "email", "address", "company"]; 
    var arr_new = []; 
    for (var i = 0; i < arr_columns.length; i++) { 
     var col = arr_columns[i]; 
     arr_new[i] = arr.indexOf(col) != -1 ? null : { visibilty: false }; 
    } 
    return arr_new; 
} 

Working example

這可以縮短仍然使用數組的map()方法,但要注意這個舊的瀏覽器不支持(IE8和更低)

function toggleVis(arr) { 
    var arr_columns = ["name", "last_name", "phone", "email", "address", "company"];  
    return arr_columns.map(function(col) { 
     return arr.indexOf(col) != -1 ? null : { visibilty: false }; 
    }) 
} 

Working example

+0

爲什麼你要返回字符串「null」而不是空值本身? – otajor

+0

因爲我是一個白癡,我忘了更新這些值太:)謝謝 –

+0

哦,我沒有注意到這是OP所做的 - 認爲必須有一些原因。涼 – otajor