Javascript 能否在find()中使用includes()?

Javascript 能否在find()中使用includes()?,javascript,Javascript,当我尝试在find()中使用includes()时,它不会超过2项。JSON文件是有效的。所以我想知道,有没有更好的解决方案,因为这似乎不起作用 async function getTheRightObject(input){ let Obj = await aJSONFile.find(item => item.AnArray.includes(input)); console.log(Obj); return Obj; } let userInpu

当我尝试在
find()
中使用
includes()
时,它不会超过2项。JSON文件是有效的。所以我想知道,有没有更好的解决方案,因为这似乎不起作用

  async function getTheRightObject(input){
    let Obj = await aJSONFile.find(item => item.AnArray.includes(input));
    console.log(Obj);
    return Obj;
  }

  let userInput = "annother one";

  getTheRightObject(userInput).then(function(output){
    console.log(output);
  }).catch(function (err) {
    //Error things
  });
JSON类似于:

[{
    "Id": 1,
    "Code": "586251af58422732b34344c340ba3",
    "Input": ["official Name", "officialname", "oficial name", "officcial name"],
    "Name": "Official Name",
    "Flavor": "",
    "Image": "https://123.com/image.png"
  },
  {
    "Id": 2,
    "Code": "597f723dceeca347a243422f9910e",
    "Input": ["another one", "anotherone", "annother one", "another 1"],
    "Name": "Another One",
    "Flavor": "A bit of text",
    "Image": "http://123.com/image2.png"
  },
  etc...
]
因此,我想在这个JSON文件中搜索一个对象,它将用户的输入与JSON文件的对象
input
相匹配,并返回
名称
。但这种解决方案似乎只适用于前2/3左右的项目

编辑: 看起来我在前两个对象中只有小写字符。在json文件中的其他对象中,我也使用了大写字符

所以我的解决方案是最终的

  • json文件中的所有
    object.Input=['text1'、'text2'、'text3'等]
    现在都是小写
  • 对输入使用
    toLowerCase()
    。比如:
  • let Obj=wait aJSONFile.find(item=>item.AnArray.includes(input.toLowerCase))

    这在我的例子中是有效的,因为我知道对象在我的例子中是非常独特的。在任何其他情况下(即当你期望有多个对象时),你可以在这里使用Tiny Giant或varit05的解决方案

    find:find()方法返回数组中满足所提供测试函数的第一个元素的值

    文件:

    includes:includes()方法确定数组是否包含特定元素,并根据需要返回true或false

    文件:

    回答你的问题:

    尝试使用
    for
    循环和
    if
    从对象数组中获取所需数据


    希望有帮助

    它看起来像您正在寻找的,它返回一个新数组,其中包含导致提供的函数返回true的所有元素,而返回导致提供的函数返回true的第一个元素的值

    在下面的示例中,我压缩了JSON和一些变量名,并删除了不相关的async/await用法,以帮助将来的读者提高可读性

    let data=JSON.parse('[{“id”:1,“arr”:[“a”,“aa”,“aaa”]},{“id”:2,“arr”:[“b”,“bb”,“bbb”]},{“id”:3,“arr”:[“c”,“cc”,“ccc”]},{“id”:4,“arr”:[“a”,“bb”,“ccc”]});
    常量过滤器=(字段,输入)=>data.filter(e=>e[field]。包括(输入));
    /*
    *仅供演示之用。
    *将筛选器调用的结果映射到
    *匹配id,然后输出人类可读的结果
    *输出示例:“a:[1,4]”
    */
    const test=(…args)=>(console.log(`${args[1]}:${JSON.stringify(filter(…args.map(e=>e.id))),test);
    测试('arr','a')
    ('arr','aa')
    ('arr','aaa')
    ('arr','b')
    ('arr','bb')
    (‘arr’、‘bbb’)
    ('arr','c')
    (‘arr’、‘cc’)
    (‘arr’、‘ccc’)
    
    .as控制台包装{最大高度:100%!重要;高度:100%!重要}
    感谢mate的回复。我认为在find()中使用includes()是一种简单且“干净”的方法。因为它适用于json文件的前两项。我将使用for循环。很高兴知道它对您有帮助!