Как правильно сопоставить ключ и значение с некоторой переменной, используя массив Javascript? - PullRequest
0 голосов
/ 05 февраля 2019

Я пытаюсь создать функцию в javascript, чтобы получить значение, соответствующее внешней переменной.

Я создал массив ключ / значение.Затем я сделал функцию, которая проверит, соответствует ли значение переменной.Затем я верну ключ этого значения.

function findNumberFromMonth($data)
{    
var obj = {
    01: "Jan",
    02: "Feb",
    03: "Mar",
    04: "Apr",
    05: "May",
    06: "Jun",
    07: "Jul",
    08: "Aug",
    09: "Sep",
    10: "Oct",
    11: "Nov",
    12: "Dec"
    }

 for(var element in obj)
         {
             if($data == element.value )
                 {
                     $number = element.key
                 }
          return $number;
         }

}

Я ожидал вывода «01», если я инициализирую $ data как «Jan».

Но я получил только неопределенный объект,Как я могу обработать?

Спасибо за ваши ответы.

Ответы [ 6 ]

0 голосов
/ 05 февраля 2019

Вы присваиваете переменную $ number в операторе if.Но верните это из заявления if.Вы должны переместить строку возврата в оператор if и, если ничего не возвращено, вы можете вернуть ложное значение.

function findNumberFromMonth($data) {
  var obj = {
    01: "Jan",
    02: "Feb",
    03: "Mar",
    04: "Apr",
    05: "May",
    06: "Jun",
    07: "Jul",
    08: "Aug",
    09: "Sep",
    10: "Oct",
    11: "Nov",
    12: "Dec"
  }

  for (var key in obj) {
    if ($data === obj[key])
      return key;
  }

  return false;

}

console.log(findNumberFromMonth('Mar'));
0 голосов
/ 05 февраля 2019

если вам нужны и ключи, и значения одновременно, используйте object.entries и итерируйте по нему.

    const data = "Feb";
    const obj = {
        "01": "Jan",
        "02": "Feb",
        "03": "Mar",
        "04": "Apr",
        "05": "May",
        "06": "Jun",
        "07": "Jul",
        "08": "Aug",
    }
   
    
   for (let [key, value] of Object.entries(obj)) {
        if(data === value )
        {
           console.log(key);
        }
    }
0 голосов
/ 05 февраля 2019

Когда вы используете for(let x in obj) x - это key объекта. для ... in.

function findNumberFromMonth($data)
{    
	var obj = {
		01: "Jan",
		02: "Feb",
		03: "Mar",
		04: "Apr",
		05: "May",
		06: "Jun",
		07: "Jul",
		08: "Aug",
		09: "Sep",
		10: "Oct",
		11: "Nov",
		12: "Dec"
    }

   for(var key in obj)
   {
     if($data == obj[key]) return key;
   }
}
console.log(findNumberFromMonth('Jan'));
0 голосов
/ 05 февраля 2019

Это можно сделать с find и Object.entries:

function findNumberFromMonth(data) {    
  const months = {
      01: "Jan",
      02: "Feb",
      03: "Mar",
      04: "Apr",
      05: "May",
      06: "Jun",
      07: "Jul",
      08: "Aug",
      09: "Sep",
      10: "Oct",
      11: "Nov",
      12: "Dec"
  };
  
  return Object.entries(months).find(([key, val]) => data === val)[0];
}

console.log(findNumberFromMonth('Oct'));
0 голосов
/ 05 февраля 2019

Вы можете сделать это.

var obj = {
  01: "Jan",
  02: "Feb",
  03: "Mar",
  04: "Apr",
  05: "May",
  06: "Jun",
  07: "Jul",
  08: "Aug",
  09: "Sep",
  10: "Oct",
  11: "Nov",
  12: "Dec"
}

var key = Object.keys(obj)[Object.values(obj).indexOf("Jun")]

console.log(key)
0 голосов
/ 05 февраля 2019

Если вы хотите сопоставить названия месяцев с номерами месяцев, ваш объект задом наперед:

function findNumberFromMonth($data)
{    
   var months = {
    "Jan": "01",
    "Feb": "02",
    "Mar": "03",
    // ...
    };

    return months[$data];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...