我希望能够键入“ Hammerhead”来调用“ 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"
  }
}


我希望输出是“ Shark”而不是未定义。

最佳答案

看来您想访问对象中的值。通过其部分名称。


使用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"))

10-04 15:14