Javascript получить имя переменной короткого замыкания - PullRequest
0 голосов
/ 03 июля 2019

Я проверяю null следующим образом:

Допустим, c равно нулю.

if (a == null || b == null || c == null || d == null) { //short cirtcuit on the first null value (c)

    let grabNullKey = a == null || b == null || c == null || d == null;

    // I want this to grab the variable that is null, instead this logs `true`

    console.log(grabNullKey)

Я хочу записать имя переменной (c) впользователь, есть ли сокращение для вывода имени переменной вместо 4 операторов if?

Ответы [ 3 ]

4 голосов
/ 03 июля 2019

Сначала плохие новости, JavaScript не позволяет печатать имя переменной в виде строки .Хорошая новость в том, что есть способ обойти это.

Чтобы иметь возможность напечатать имя переменной, вам нужно будет использовать объект вместо ряда переменных.Таким образом, вам понадобится такой объект:

const variableObject = { a: true, b: true, c: null, d: true };

Чтобы найти первое нулевое значение и распечатать его, вам нужно перебрать их ключи и найти первое, равное нулю:

const variableObject = { a: true, b: true, c: null, d: true };
const variableNames = Object.keys(variableObject); // ['a', 'b', 'c', 'd']
const firstNullVar = variableNames.find((key) => variablesObject[key] === null); // 'c'
console.log(firstNullVar); // will print the string 'c'

Если ни одна из переменных не равна null, будет напечатано undefined, хотя обойти это легко.

1 голос
/ 03 июля 2019

Создайте литерал объекта и присвойте объекту переменные в виде пар ключ / значение. Передайте объект в качестве параметра функции, показанной в следующей демонстрации:

функция null (объект)

function nulls(obj) {
  return (Object.keys(obj).filter(key => obj[key] === null)).join(', ');
}

@ params object [object]: Object Literal состоит из ключа (имена переменных, a, b, c, ...) и значения (значение переменной, 1, 2, null, ...)

  • Object.keys(object) возвращает массив ключей (имен переменных)
  • .filter(key => object[key] === null) возвращает массив ключей (имен переменных) со значением (object[key]) null
  • .join(', ') возвращает массив ключей (имен переменных) в виде строки

function nulls(obj) {
  return (Object.keys(obj).filter(key => obj[key] === null)).join(', ');
}

let x = {
  a: 1,
  b: 2,
  c: null,
  d: 4,
  e: null,
  f: 6,
  g: null
};

console.log(nulls(x));
0 голосов
/ 03 июля 2019

думаю, что это могло бы сделать это:

var itemsA = ['a','b','c','d'];
var valsA = [a,b,c,d];
var ind = valsA.indexOf(null);
if(ind != -1){
 console.log(itemsA[ind]); 
}

вы также можете сделать нечто подобное, используя объект JSON с find или findIndex

...