Javascript 如何对对象内数组属性的长度求和

Javascript 如何对对象内数组属性的长度求和,javascript,arrays,Javascript,Arrays,我有一个像这样的对象: 设arr={ 姓名:[“约翰”、“保罗”], 手机:[“iPhone”、“三星”、“华为”], 服装品牌:['HM','Zara'] } 您可以使用和 Object.values将为您提供Object中的所有值,并使用reduce计算总长度 让obj={name:['John','Paul'],phone:['iPhone','Samsung','Huawei'],衣物品牌:['HM','Zara']} 设op=Object.valuesobj.reduce out,

我有一个像这样的对象:

设arr={ 姓名:[“约翰”、“保罗”], 手机:[“iPhone”、“三星”、“华为”], 服装品牌:['HM','Zara'] } 您可以使用和

Object.values将为您提供Object中的所有值,并使用reduce计算总长度

让obj={name:['John','Paul'],phone:['iPhone','Samsung','Huawei'],衣物品牌:['HM','Zara']} 设op=Object.valuesobj.reduce out,inp=>out+inp.length,0 控制台。logop使用reduce . 获取对象中的所有值,并在reduce中逐个添加数组的长度

var arr={ 姓名:[“约翰”、“保罗”], 手机:[“iPhone”、“三星”、“华为”], 服装品牌:['HM','Zara'] }
console.logObject.valuesarr.reduceac,e=>acc+=e.length,0您可以检查.flatted值数组的长度:

常数arr={ 姓名:[“约翰”、“保罗”], 手机:[“iPhone”、“三星”、“华为”], 服装品牌:['HM','Zara'] };
console.logObject.valuesarr.flat.length 因为在使用对象时,in循环是您的朋友。 下面是解决您的问题的示例:

var arr={姓名:['John','Paul',手机:['iPhone','Samsung','Huawei',服装品牌:['HM','Zara',您好:1}; var总长度=0; arr中的forvar字符{ //在添加值之前,请确认键值是数组。 ifArray.isArrayarr[char]{ totalLength+=arr[char]。长度; } } console.logtotalLength 您可以在Object.values上使用,并检查该值是否为array by array.isArray

让obj={name:['John','Paul'],phone:['iPhone','Samsung','Huawei'],衣物品牌:['HM','Zara']} 设sum=Object.valuesobj.reduceac,a=>{ 返回Array.isArraya?ac+a。长度:ac },0 console.logsum 你应该用这个

const arr={姓名:['John','Paul'],手机:['iPhone','Samsung','Huawei'],服装品牌:['HM','Zara']}; const sum=Object.valuesarr.reduceac,{length}=>{ 返回acc=长度?acc+长度:acc; }, 0;
console.logsum 在这里,您可以使用另一种方法直接迭代对象键:

设arr={ 姓名:[“约翰”、“保罗”], 手机:[“iPhone”、“三星”、“华为”], 服装品牌:['HM','Zara'] } 设totalen=0; 对于k-in-arr { Array.isArrayarr[k]&&totalen+=arr[k]。长度; }
console.logen;是的,平铺是最好的方式。我可以知道下选的原因吗?我不是这样做的人,但一个可能的原因是使用过滤器,当你可以在reduce中做同样的事情时。如果是数组,则添加长度,否则添加0@CodeManiac我尝试使用Array.length属性的析构函数,因此如果我事先不过滤它,如果所讨论的对象不是数组,我将得到一个错误。即使没有过滤,它也可以工作。尝试删除筛选器并运行代码。如果任何东西没有长度属性,它将导致未定义,您可以使用三元运算符检查长度是否未定义,然后在reduce中相应地添加值。键值是否始终是数组?