【问题标题】:Apparently simple function not returning anything显然简单的功能不返回任何东西
【发布时间】:2019-04-15 04:37:00
【问题描述】:

我确定我只是有一点时间,但我什么都想不通。我想创建一个快速函数来总结数组中特定 JSON 对象的值,但它什么也不返回。代码如下:

var a=[{"b":"23"},{"b":"37"}]
function sumJSON(json,elem){
    var total=0;
    $.each(json,function(index,item){
        var count=index+1;
        total+=Number(item[elem]);
        if(count===json.length){
            return total;
        }
    })
}
console.log(sumJSON(a,"b"));

这是jsfiddle

【问题讨论】:

    标签: javascript jquery arrays json function


    【解决方案1】:

    以防万一您希望使用纯 javascript 解决此问题。

    var a = [{"b":"23"},{"b":"37"}]
    
    function sumJSON(a,key) {
      return a.reduce((s, data) => s + (+data[key]), 0)
    }
    
    console.log(sumJSON(a, 'b'))

    【讨论】:

    • 谢谢,我不知道 .reduce()
    • 请务必阅读“Array.reduce”、“Array.map”、“Array.filter”这些将帮助您解决大多数 javascript 问题。
    【解决方案2】:
    var a=[{"b":"23"},{"b":"37"}]
    function sumJSON(json,elem){
        var total=0;
        $.each(json,function(index,item){
            total+=Number(item[elem]);
        })
        return total;
    }
    console.log(sumJSON(a,"b"));
    

    $each 不需要返回任何东西,只是为集合中的每个成员调用一个函数,你需要在调用 $.each 之后返回总计,一旦该函数已经为所有元素调用过

    【讨论】:

    • 既然 JS 是异步的,那么在 $.each 完成之前不会有返回总数的风险吗?还是我在这种情况下误解了异步?
    • @vurtual $.each 不是异步的,每个元素都会执行一次,然后再转到下一行。例如,如果您在 $.each 中调用异步函数,情况会有所不同。事实上,你可以自己检查here :) 那里没有异步代码 ;)
    • 我脑子里一定是把 ajax 和 js 混在一起了。我编码的次数:if (index +1 == array.length) 不必要!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-11
    • 1970-01-01
    • 2020-09-28
    • 2023-03-28
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多