你能在find()中使用includes()吗?

时间:2017-12-18 20:24:32

标签: javascript

当我尝试在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文件的其他对象中,我也使用了大写字符。

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

  1. json文件中的所有Name现在都是小写
  2. 在输入上使用object.Input = ['text1', 'text2', 'text3, 'etc']。像:
  3. toLowerCase()

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

2 个答案:

答案 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 }