Как я могу получить имя свойства объекта по его значению [JS] - PullRequest
0 голосов
/ 11 марта 2019
questions={
     1:{
          quest: "blah blah blah",
          answers: ["1812", "1837", "1864", "1899"],
          correct: "1837"
     },
     2:{
         quest: "fasfa asf",
         answers : ["2","3","4","5"],
         correct : "3"
     }
 }

Например, я знаю значение 1.Мне нужно получить имя этого объекта с его значением. var x = {quest: "blah blah blah", answers: ["1812", "1837", "1864", "1899"], correct: "1837"}

returnNameOf(x) ожидаемый результат 1;

Ответы [ 3 ]

1 голос
/ 11 марта 2019

Вы можете использовать find() на Object.keys() и сравнивать объекты с помощью JSON.stringify()

let questions={
     1:{
          quest: "blah blah blah",
          answers: ["1812", "1837", "1864", "1899"],
          correct: "1837"
     },
     2:{
         quest: "fasfa asf",
         answers : ["2","3","4","5"],
         correct : "3"
     }
 }
 
 let val = {
         quest: "fasfa asf",
         answers : ["2","3","4","5"],
         correct : "3"
     }
function getKey(obj,value){
  if(typeof value === "object"){
    value = JSON.stringify(value);
    return Object.keys(obj).find(key => JSON.stringify(obj[key]) === value);
  }
  else return Object.keys(obj).find(key => obj[key] === value);
}

console.log(getKey(questions,val));
0 голосов
/ 11 марта 2019

Вы можете искать в записях объектов:

const key = 0, value = 1;

const result = Object.entries(questions).find(it => it[value] === x)[key];
0 голосов
/ 11 марта 2019

Вы можете преобразовать объект в строку и использовать для сравнения.Поэтому в этом примере нам нужно найти ключ, значение которого совпадает с toMatch.Поэтому в функции toMatch преобразуется в строку, поскольку проверка соответствия объекта или проверки на равенство объекта возвращает false, поскольку они сравнивают ячейку памяти

.

let toMatch = {
  quest: "blah blah blah",
  answers: ["1812", "1837", "1864", "1899"],
  correct: "1837",
};

let questions = {
  1: {
    quest: "blah blah blah",
    answers: ["1812", "1837", "1864", "1899"],
    correct: "1837"
  },
  2: {
    quest: "fasfa asf",
    answers: ["2", "3", "4", "5"],
    correct: "3"
  }
}


function findKey(objString) {
  let val = JSON.stringify(toMatch)
  for (let keys in questions) {
    if (JSON.stringify(questions[keys]) === val) {
      return keys;
    }
  }
}

console.log(findKey(toMatch))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...