2016-07-05 6 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

Смежные вопросы