Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript reduce,无法处理对象数组_Javascript - Fatal编程技术网

Javascript reduce,无法处理对象数组

Javascript reduce,无法处理对象数组,javascript,Javascript,我试图在一组对象上处理这个规则 如果有一个或多个类型为equal landline的对象,则返回第一个数字;如果没有类型为=landline的对象,则仅当其类型属性不同于mobile时返回第一个数字;如果equal to mobile,则返回下一个数字(如果可用),否则返回空白值 var phoneObject=[ { 键入:“移动”, 电话:0123456789 }, { 键入:“移动”, 号码:'78945610' } { 类型:'固定线路' 号码:'15975345' } ]; var

我试图在一组对象上处理这个规则 如果有一个或多个类型为equal landline的对象,则返回第一个数字;如果没有类型为=landline的对象,则仅当其类型属性不同于mobile时返回第一个数字;如果equal to mobile,则返回下一个数字(如果可用),否则返回空白值

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,谢谢你的帮助。文本太长,不能发表评论。然后在回答中提到:“这太长,不能发表评论,但是…”文本太长,不能发表评论。然后在回答中提到:“这太长,不能发表评论,但是…”