【问题标题】:Array reduce filter not working with dynamic values数组减少过滤器不适用于动态值
【发布时间】:2018-01-17 21:50:46
【问题描述】:

我正在编写一个有滑块的代码,当滑块值发生变化时,我想进行 api 调用并获得结果。这是我的代码。

function alertValues() {
    var alcohol, sulphate, sulphur;
    //Or
    if ($("#sliderValueAlcohol").val()) {
        alcohol = $("#sliderValueAlcohol").val();
    }
    if ($("#sliderValueSulphate").val()) {
        sulphate = $("#sliderValueSulphate").val();
    }
    if ($("#sliderValueSulphur").val()) {
        sulphur = $("#sliderValueSulphur").val();
    }
    if (alcohol && sulphate) {
        var idString = sulphate + "";
        var id = 1;

        console.log(typeof id);
        $.ajax({
            type: 'post',
            url: 'https://thcj3oq32b.execute-api.us-east-1.amazonaws.com/prod/getsimulation',
            data: JSON.stringify({
                "targetState": "7"
            }),
            /* etc */
            success: function (jsondata) {
                var arr2 = jsondata;
                var result = arr2
                    .filter(function (objs) {
                        return ((objs.find((obj) => obj.ingredients === "sulphate").min <= id) && (objs.find((obj) => obj.ingredients === "sulphate").max >= id) && (objs.find((obj) => obj.ingredients === "alcohol").max == 14));
                    })
                    .reduce(function (a, b) {
                        return a.concat(b);
                    });

                console.log(JSON.stringify(result[0].target_state));

            },
            error: function () {
                alert("error");
            }
        })
    }
}

在这里,当我通过 var id = parseFloat(idString); 而不是静态数字时,我得到的错误是 Uncaught TypeError: Reduce of empty array with no initial value。无法理解我哪里出错了。请告诉我如何解决这个问题。

谢谢

【问题讨论】:

  • 您好,您能否在成功函数中的 jsonData 上添加一个 console.log,并在 ajax 调用之前添加 console.log id 并显示值是什么?
  • 为什么不给reduce函数一个初始值,例如:.reduce(function(a, b) { ... }, [])
  • @CRice,这将返回一个空白数组:(
  • 是的,这是因为您要减少的数组一开始是空的。您是否期望 result.filter( ... ) 调用永远不会给您一个空数组?
  • @CRice 的意思是您的filter() 函数正在返回一个空数组。当您在没有默认值的空数组上使用 reduce() 时,您会收到该错误。在尝试 reduce() 之前尝试查看 filter() 正在重新调整的内容。

标签: javascript jquery post jquery-ui-slider


【解决方案1】:

您忘记在 reduce 操作中初始化值。添加空数组初值[]

【讨论】:

  • 这将返回一个空白数组:(
  • 我看到它在这个小提琴 jsfiddle.net/vjt45xv4/20 中工作。数组看起来不为空
  • 是的,如果我传递一个静态值,但是当我传递我的滑块值时它不会:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 2019-10-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 2020-07-29
  • 1970-01-01
相关资源
最近更新 更多