我正试图从函数
获得最终输出[{'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 :(得分: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;
}
使用数组的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 };
})
}