返回一个数组解析错误的函数?

问题描述:

我试图得到一个最终的输出如这从一个函数返回一个数组解析错误的函数?

[{'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} ;' –

首先你的代码总体上看起来不错。我注意到的唯一问题是,你应该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