【问题标题】:Processing JSON Object/Array based on value根据值处理 JSON 对象/数组
【发布时间】:2019-03-27 12:35:35
【问题描述】:

尝试创建一个函数,它的第一个参数是字符串,第二个参数是 JSON LIST:

[
    {
        "date": "09/09/18",
        "how_many": 11,
        "species": "XXXXX"
    },
    {
        "date": "04/11/17",
        "how_many": 41,
        "species": "TTTTTT"
    },
    {
        "date": "17/03/18",
        "how_many": 30,
        "species": "DDDDDDDD"
    },
    {
        "date": "17/08/18",
        "how_many": 31,
        "species": "XXXXX"
    },
]

如果字符串存在于每个 JSON 条目的“物种”计数中,它将返回出现次数。

本质上是一个函数,它返回对象的数组(或列表)中出现的次数,这些对象的“species”键与函数的第一个参数匹配?

【问题讨论】:

    标签: javascript json loops ecmascript-6


    【解决方案1】:

    您可以使用Array.reduce

    来自文档,

    reduce() 方法对数组的每个成员执行(您提供的)reducer 函数,从而产生单个输出值。

    您的 reducer 函数的返回值被分配给累加器,该累加器的值在整个数组的每次迭代中都会被记住,并最终成为最终的单一结果值。

    解释

    正如您现在所知道的,reduce 函数会将数组缩减为单个值,这里将是所有匹配的 species 的总和。 sum 的默认值为0。在迭代时,我们根据函数中传递的种类值检查对象的种类。如果值匹配,则将其 how_many 值添加到总和中。

    ES6

    let list = [{"date":"09/09/18","how_many":11,"species":"XXXXX"},{"date":"04/11/17","how_many":41,"species":"TTTTTT"},{"date":"17/03/18","how_many":30,"species":"DDDDDDDD"},{"date":"17/08/18","how_many":31,"species":"XXXXX"}];
    
    function findOccurences(str, arr) {
      return arr.reduce((a,c) => a + (c.species === str ? c.how_many : 0), 0);
    }
    
    console.log(findOccurences("XXXXX", list));

    ES5

    let list = [{"date":"09/09/18","how_many":11,"species":"XXXXX"},{"date":"04/11/17","how_many":41,"species":"TTTTTT"},{"date":"17/03/18","how_many":30,"species":"DDDDDDDD"},{"date":"17/08/18","how_many":31,"species":"XXXXX"}];
    
    function findOccurences(str, arr) {
      // Here a - accumulator and c - current value
      return arr.reduce(function(a, c){
        // If the species of object is same as passed value (str), add it to total sum
        if(c.species === str) {
          a += c.how_many;
        }
        return a;
      }, 0);
    }
    
    console.log(findOccurences("XXXXX", list));

    【讨论】:

    • 可爱!这行得通。请问有人可以帮我分解吗?我知道 Java 但不知道 javascript !可爱的
    • @AppleFarmer - 很高兴帮助你交配!为了更好地理解,我在 ES5 中添加了解释和代码。我希望我也能解释这个概念。
    【解决方案2】:

    试试这个:

    function getCount(str, jsonArr) {
       var match = jsonArr.filter(obj=> obj.species === str);
       return match.length;
    }
    

    【讨论】:

    • 试过了,不行!返回错误答案,对不起。
    • 向我们展示您的输入、预期输出和此函数返回的输出
    • 字符串匹配时,您是否期望 'how_many' 值的总和?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 2010-09-20
    • 1970-01-01
    • 2015-11-14
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多