这个双重for循环怎么用map实现呢?

for (var i = 0; i < array.length; i++) {
    if (array[i].buyerId == 'zhangsan' && array[i].goodsNum > 3) {
        for (var k = 0; k < array[i].goodsIds.length; k++) {
            // if(array[i].goodsIds[k]=='')
            if (array[i].goodsIds[k].goodsId == 'iphoneX') {
                newArr.push(array[i]);
            }
        }
    }
}
阅读 3.3k
3 个回答
array
.filter(v => v.buyerId === 'zhangsan' && array[i].goodsNum > 3)
.filter(v => v.goodsIds.includes('iphoneX'))
const res = array.reduce((prev,next)=>{
      if(next.buyerId==='zhangsan' && next.goodsNum>3 && next.goodsIds.find(({goodsId})=>(goodsId==='iphoneX'))) prev.push(next);
      return prev;
    },[]);

如果是想筛选满足条件的订单可以这样

orders.filter(i=>i.buyerId==="zhangsan" && i.goodsNum>3 && i.goodsIds.some(j=>j.goodsId==="iphoneX"))

但是题中的for循环与这个不完全一致,你的订单里如果有2个iphoneX就会添加2次相同的订单, 而且=====不完全一致
如果需要重复,对结果执行

.map(k=>Array(k.goodsIds.filter(v=>v.goodsId==="iphoneX").length).fill(k)).flat()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题