解析函数时返回一个数组?

时间:2016-07-05 13:00:00

标签: javascript jquery

我正试图从函数

获得最终输出
[{'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'}";
      }
    }
  }
}

1 个答案:

答案 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;
}

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