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文件中的其他对象中,我也使用了大写字符
所以我的解决方案是最终的
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循环。很高兴知道它对您有帮助!