当我尝试在Device.StartTimer(TimeSpan.FromSeconds(1), () =>
{
// called every 1 second
// do stuff here
return true; // return true to repeat counting, false to stop timer
});
中使用includes()
时,它不会超过2个项目。 JSON文件有效。所以我想知道,有没有更好的解决方案,因为这似乎不起作用?
find()
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文件中搜索一个与用户匹配的对象'使用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...
]
输入,并发送回Input
。但是这个解决方案似乎只适用于前2/3项左右。
修改 好吧,似乎我在前两个对象中只有小写字符。在json文件的其他对象中,我也使用了大写字符。
所以我的解决方案最终是;
Name
现在都是小写object.Input = ['text1', 'text2', 'text3, 'etc']
。像: toLowerCase()
这适用于我的情况因为我知道对象在我的情况下非常独特。在任何其他情况下(即当您期望多个对象时),您可以在这里使用Tiny Giant或varit05的解决方案
答案 0 :(得分:0)
你走了!
find: find()方法返回数组中第一个满足提供的测试函数的元素的值。
文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
包括: includes()方法确定数组是否包含某个元素,并在适当时返回true或false。
文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
回答你的问题:
尝试将for
循环与if
一起用于来自对象数组的所需数据。
希望它有所帮助!
答案 1 :(得分:0)
您好像正在寻找Array#filter
,它会返回一个包含所有元素的新数组,导致提供的函数返回true,而Array#find
返回第一个元素的值,使得提供的函数返回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"]}]');
const filter = (field, input) => data.filter(e => e[field].includes(input));
/*
* For demonstration purposes only.
* Map the result of the filter call to an array of
* matching id's, then output a human readable result
* Example output: "a: [1,4]"
*/
const test = (...args) => (console.log(`${args[1]}: ${JSON.stringify(filter(...args).map(e => e.id))}`), test);
test('arr', 'a')
('arr', 'aa')
('arr', 'aaa')
('arr', 'b')
('arr', 'bb')
('arr', 'bbb')
('arr', 'c')
('arr', 'cc')
('arr', 'ccc');

.as-console-wrapper { max-height: 100% ! important; height: 100% !important }