Javascript reduce,无法处理对象数组
我试图在一组对象上处理这个规则 如果有一个或多个类型为equal landline的对象,则返回第一个数字;如果没有类型为=landline的对象,则仅当其类型属性不同于mobile时返回第一个数字;如果equal to mobile,则返回下一个数字(如果可用),否则返回空白值Javascript reduce,无法处理对象数组,javascript,Javascript,我试图在一组对象上处理这个规则 如果有一个或多个类型为equal landline的对象,则返回第一个数字;如果没有类型为=landline的对象,则仅当其类型属性不同于mobile时返回第一个数字;如果equal to mobile,则返回下一个数字(如果可用),否则返回空白值 var phoneObject=[ { 键入:“移动”, 电话:0123456789 }, { 键入:“移动”, 号码:'78945610' } { 类型:'固定线路' 号码:'15975345' } ]; var
var phoneObject=[
{
键入:“移动”,
电话:0123456789
},
{
键入:“移动”,
号码:'78945610'
}
{
类型:'固定线路'
号码:'15975345'
}
];
var number=phoneObject.reduce((a,b)=>{
如果(a.type=='landline'&&b.type=='landline'){
b、 数字=一个数字;
}
否则{
如果(a.type!=='landline'&&b.type!=='landline'){
如果(a.type!=='mobile'){
b、 数字=一个数字;
}否则{
如果(b.编号){
返回b.number;
}
否则{
b、 数字='';
}
}
}
}
返回b.number;
});
控制台日志(编号)代码>此注释太长,但
你忘了两个逗号:
{
type: 'mobile',
number:'78945610'
}
{
type:'landline'
number:'15975345'
}
必须编辑到:
{
type: 'mobile',
number:'78945610'
},
{
type:'landline',
number:'15975345'
}
这对于评论来说太长了,但是
你忘了两个逗号:
{
type: 'mobile',
number:'78945610'
}
{
type:'landline'
number:'15975345'
}
必须编辑到:
{
type: 'mobile',
number:'78945610'
},
{
type:'landline',
number:'15975345'
}
你可以做一些像样的检查并保存第二个号码。仅当没有固定电话号码时才使用
这项建议是符合实际情况的
函数getNumber(数组){
变量计数器=0,
第二个=“”;
返回数组.reduce(函数(r,o){
if(r){
返回r;
}
如果(o.type==‘固定线路’){
返回o.number;
}
计数器++;
如果(计数器==2){
第二个=o号;
}
}第二名;
}
//应返回此数组的第三个数字
var phoneObject1=[{type:'mobile',number:'0123456789'},{type:'mobile',number:'78945610'},{type:'landline',number:'15975345'}];
//对于这一个,它应该返回第一个
var phoneObject2=[{type:'landline',number:'0123456789'},{type:'mobile',number:'78945610'},{type:'landline',number:'15975345'}];
//对于这个,它应该返回第二个数字
var phoneObject3=[{type:'mobile',number:'0123456789'},{type:'mobile',number:'78945610'}];
//对于最后一个,它应该返回一个空值
var phoneObject4=[{type:'mobile',number:'0123456789'}];
log([phoneObject1,phoneObject2,phoneObject3,phoneObject4].map(getNumber))代码>您可以做一些适当的检查并保存第二个数字。仅当没有固定电话号码时才使用
这项建议是符合实际情况的
函数getNumber(数组){
变量计数器=0,
第二个=“”;
返回数组.reduce(函数(r,o){
if(r){
返回r;
}
如果(o.type==‘固定线路’){
返回o.number;
}
计数器++;
如果(计数器==2){
第二个=o号;
}
}第二名;
}
//应返回此数组的第三个数字
var phoneObject1=[{type:'mobile',number:'0123456789'},{type:'mobile',number:'78945610'},{type:'landline',number:'15975345'}];
//对于这一个,它应该返回第一个
var phoneObject2=[{type:'landline',number:'0123456789'},{type:'mobile',number:'78945610'},{type:'landline',number:'15975345'}];
//对于这个,它应该返回第二个数字
var phoneObject3=[{type:'mobile',number:'0123456789'},{type:'mobile',number:'78945610'}];
//对于最后一个,它应该返回一个空值
var phoneObject4=[{type:'mobile',number:'0123456789'}];
log([phoneObject1,phoneObject2,phoneObject3,phoneObject4].map(getNumber))
我认为您想象的是.reduce()
的参数与.sort()
中的参数一样工作,如果您使用的是对象,则可能是这种情况,但在您的示例中,a.number开始时是未定义的,最后设置为b.number=undefined
,然后返回一个数字,该数字变成a
。在下一次迭代中,调用a.number,这当然是未定义的,因此再次设置b.number=undefined,循环继续。我将在mhodges指出的那一行简短地给出一个答案,reduce
的第一个参数是累加器参数:它是先前调用reduce函数返回的任何参数。对于第一次迭代,它使用提供的值:因此始终提供一个初始值以减少
!为什么number
和phone
?我的错误应该是number,谢谢你的帮助,我认为你是在想象的参数。reduce()
像.sort()
中的参数一样工作,如果你使用的是对象,情况可能是这样,但是在你的例子中,a.number一开始是未定义的,最后设置b.number=undefined
,然后返回一个数字,该数字变成a
。在下一次迭代中,调用a.number,这当然是未定义的,因此再次设置b.number=undefined,循环继续。我将在mhodges指出的那一行简短地给出一个答案,reduce
的第一个参数是累加器参数:它是先前调用reduce函数返回的任何参数。对于第一次迭代,它使用提供的值:因此始终提供一个初始值以减少
!为什么number
和phone
?我的错误应该是number,谢谢你的帮助。文本太长,不能发表评论。然后在回答中提到:“这太长,不能发表评论,但是…”文本太长,不能发表评论。然后在回答中提到:“这太长,不能发表评论,但是…”