【发布时间】: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