TypeError:无法读取属性';减少';javascript中getTotal()处未定义的

TypeError:无法读取属性';减少';javascript中getTotal()处未定义的,javascript,ecmascript-6,find,reduce,Javascript,Ecmascript 6,Find,Reduce,从下面的代码中,我想根据我的输入值/过滤器获得Total的值。如果我使用.filter()方法,它在我的应用程序中不起作用(获取空响应或0),但在外部独立页面中起作用,我不确定原因。请帮帮我。谢谢 使用下面的代码,我在应用程序中遇到了错误:TypeError:getTotal()无法读取未定义的属性'reduce'。 index.js: function getTotal(data, filters) { console.log(JSON.stringify(filters));//{"Nam

从下面的代码中,我想根据我的输入值/过滤器获得Total的值。如果我使用
.filter()
方法,它在我的应用程序中不起作用(
获取空响应或0
),但在外部独立页面中起作用,我不确定原因。请帮帮我。谢谢

使用下面的代码,我在应用程序中遇到了错误:
TypeError:getTotal()无法读取未定义的属性'reduce'。

index.js:

function getTotal(data, filters) {

console.log(JSON.stringify(filters));//{"Name":"ABC","Dept":"First","FY":"2016","Quarter":"1","Month":"April"} 
console.log(JSON.stringify(data));//[{"Name":"ABC","Dept":"First","FY":"2016","Quarter":"1","Month":"April","Total":"1200"},{"Name":"ABC","Dept":"Second","FY":"2017","Quarter":"2","Month":"May","Total":"200"},{"Name":"ABC","Dept":"First","FY":"2016","Quarter":"1","Month":"June","Total":"150"},{"Name":"DEF","Dept":"First","FY":"2016","Quarter":"1","Month":"April","Total":"200"},{"Name":"DEF","Dept":"Second","FY":"2017","Quarter":"2","Month":"May","Total":"100"},{"Name":"DEF","Dept":"First","FY":"2016","Quarter":"1","Month":"June","Total":"500"}] 

    var f = Object.entries(filters);
    console.log("f is: "+f);// Name,ABC,Dept,First,FY,2016,Quarter,1,Month,April
    const test = data.find(o => f.every(([k, v]) => o[k] === v)).reduce((s, { Total }) => s + +Total, 0);
    return test;//Output should be: 100
}


var data = [{ Name: "ABC", Dept: "First", FY: "2016", Quarter: "1", Month: "April", Total: "100" }, { Name: "ABC", Dept: "Second", FY: "2017", Quarter: "2", Month: "May", Total: "200" }, { Name: "ABC", Dept: "First", FY: "2016", Quarter: "1", Month: "June", Total: "150" }, { Name: "DEF", Dept: "First", FY: "2016", Quarter: "1", Month: "April", Total: "200" }, { Name: "DEF", Dept: "Second", FY: "2017", Quarter: "2", Month: "May", Total: "100" }, { Name: "DEF", Dept: "First", FY: "2016", Quarter: "1", Month: "June", Total: "500" }];

console.log(getTotal(data, { Name: 'ABC', Dept: 'First', FY: '2016', Quarter: '1', Month: 'April' })); // shoud give: 100

是的,现在得到了答案:

您应该使用
Array.prototype.filter
而不是
Array.prototype.find
,因为它从数组中返回数组而不是单个对象。 对象没有
reduce
方法数组,但是:

函数getTotal(数据、过滤器){
var f=对象项(过滤器);
const test=data.filter(o=>f.every([k,v])=>o[k]==v)).reduce((s,{Total}=>s++Total,0);
返回测试;//输出应为:100
}
var数据=[{Name:“ABC”,Dept:“First”,FY:“2016”,季度:“1”,月:“April”,总计:“100”},{Name:“ABC”,Dept:“Second”,FY:“2017”,季度:“2”,月:“May”,总计:“200”},{Name:“ABC”,Dept:“First”,FY:“2016”,季度:“First”,FY:“First”,FY:“150”{Name:“DEF”,Dept:“First”,FY:“2016”,季度:“1”,月:“四月”,总计:“200”},{名称:“DEF”,部门:“第二”,财政年度:“2017”,季度:“2”,月份:“5”,总计:“100”},{名称:“DEF”,部门:“第一”,财政年度:“2016”,季度:“1”,月份:“6”,总计:“500”};

log(getTotal(数据,{Name:'ABC',Dept:'First',FY:'2016',Quarter:'1',Month:'April'}));//应该给出:100
你认为
数据是什么。查找(o=>f.every([k,v])=>o[k]==v))
做什么?你认为f.every返回,或者data.find。。。data.find将返回单个数据元素或未定义元素。我希望迭代并查找/筛选我的对象,并根据我的输入筛选器将其缩减为总值。为什么要缩减?find将返回一个对象,如果找到该对象,则使用该对象访问属性directly@Gunafind将始终返回满足conditionwell的第一个元素,因为您正在内部调用函数。然后,我假设
res.data
是实际数据-您是否尝试在那里使用console.log来检查
res.data
是什么,什么是
filter
?可能问题在于
过滤器中的值不正确。。。e、 g.
console.log(res.data.slice(0,2))
(只需检查前两个条目,确保它们是预期格式)和
console.log(filter)
-在调用函数之前如果我使用filter方法,它在我的应用程序中不起作用,正如我在报告中提到的question@Guna如果不查看应用程序的其他方面,就很难判断为什么
过滤器
不起作用,您无法对从
查找
返回的对象调用
减少
find
方法将返回它从数组中找到的第一个对象,因此不应将其用于筛选。@Guna使用
filter
时出现了什么错误?@Guna-请更新您的问题并显示
数据的来源-它显然不像question@FullstackGuy,是的,现在很好。非常感谢你的帮助!