Как индексировать неполные строки в ключи JSON? - PullRequest
2 голосов
/ 15 мая 2019

Я хотел бы иметь возможность набрать "Hammerhead", чтобы вызвать объект "Shark", без его полного имени. Возможно ли это, и если да, то как?

Я пытался использовать array.indexOf(string), хотя, похоже, это не очень помогает, поскольку требует точного соответствия, например, набрав "Hammerhead Shark"

JS:

const JSON = require('animals.json');
var animals = Object.keys(JSON);

if (animals.indexOf("Hammerhead")) {
console.log(JSON["Hammerhead"].name);
}

JSON:

{
  "Hammerhead Shark": {
  "name": "Shark",
  "age": "300"
  },
  "Duck": {
  "name": "Duck",
  "age": "1000"
  }
}

Я ожидаю, что вывод будет "Акула" вместо неопределенного.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Кажется, вы хотите получить доступ к значению в объекте. По его частичному названию.

  • Получить записи объекта, используя Object.entries()
  • Найдите ключ, который includes() заданный частичный ключ.
  • вернуть второй элемент найденной записи.

const obj = { "Hammerhead Shark": { "name": "Shark", "age": "300" }, "Duck": { "name": "Duck", "age": "1000" } }

function getValueByPartialKey(obj,key){
  return (Object.entries(obj).find(([k,v]) => k.includes(key)) || [])[1]
}

console.log(getValueByPartialKey(obj,"Hammerhead"))
0 голосов
/ 15 мая 2019

Вы можете использовать string.includes(word), чтобы вернуть имя, которое соответствует искомой строке, наряду с Array.filter, также выполняет итерации по значениям и возвращает требуемые результаты.

...