这个数组对象处理该怎么写比较好?

let data = [
  {
    nums: [],
    id: 1
  },
  {
    nums: [],
    id: 2
  },{
    nums: ['222'],
    id: 3
  },{
    nums: [],
    id: 4
  },{
    nums: ['3213','33;],
    id: 5
  }
]

我要做的是

判断nums是不是空的,空的话找下一个,
如果nums不是空,就停,并拿它的id去和后台要资料,
如果全部的nums都是空的,就直接拿第一个的id去要资料

像上面这个他应该会停在这一个,并用他的id 3去向後台要资料

{
    nums: ['222'],
    id: 3
  }

这具体该怎么写?请大家帮帮忙

阅读 3.3k
5 个回答
//遍历的方法
//有资料才启动,空资料不工作
if(data.length>0){
  //预设第一个元素为目标
  let target = data[0]
  //遍历全部元素
  for(let index=0;index<data.length;index++){
    let item = data[index]
    if(item.nums && item.nums.length > 0){
      target = item
      break
    }
  }
  //用拿到的target呼叫后台拿资料
  //callAPI(target.id)
  console.log("ori", target)
}


//find方法
//有资料才启动,空资料不工作
if(data.length>0){
  //find 方法遍历所有元素,call 判定元素是否为目标
  let target = data.find(element => element.nums && element.nums.length > 0)
  //没有找到目标,取第一个
  if(!target){
    target = data[0]
  }
  //callAPI(target.id)
  console.log("find", target)
}

一行就能搞定

const { id } = data.filter(item => item.nums && item.nums.length)[0] || data[0]

第一个id先存到单独的变量里。

然后遍历其他元素,用length就可以知道nums是不是空数组了。

如果遇到非空的,就替换单独变量保存的id。
如果空的就不做操作。

遍历完以后,用单独的变量里保存的id继续后面的操作就行了。

let newData = data.filter(item => item.nums.length>0); //直接过滤取nums不为空
let targetObj = newData.length>0?newData[0]:data[0];

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题