使用lodash过滤丢失的数组对象

时间:2017-07-03 10:02:01

标签: javascript underscore.js lodash

在我的angular 4应用程序中,我有以下数组:

let sampleArray1 = [
  {
    "name":"Raman",
    "prdList":[
      {
        "p_code":"20",
        "crtList":[
          {
            "c_code":"087"
          }
        ]
      }
    ]
  },
  {
    "name":"Laxman",
    "prdList":[
      {
        "p_code":"10"
      }
    ]
  },
  {
    "name":"raj",
    "prdList":[
      {
        "p_code":"202"
      }
    ]
  },
  {
    "name":"raghav",
    "prdList":[
      {
        "p_code":"30",
        "crtList":[
          {
            "c_code":"97"
          }
        ]
      }
    ]
  }
]

在此数组中,缺少某些对象crtList。我需要过滤掉所有这些对象,并且需要拥有必须且应该具有crtList的数组。

所以我的结果sampleArray2应该有以下结果:

 [
      {
        "name":"Raman",
        "prdList":[
          {
            "p_code":"20",
            "crtList":[
              {
                "c_code":"087"
              }
            ]
          }
        ]
      },
      {
        "name":"raghav",
        "prdList":[
          {
            "p_code":"30",
            "crtList":[
              {
                "c_code":"97"
              }
            ]
          }
        ]

}     ]

如何使用lodash实现这一目标?

2 个答案:

答案 0 :(得分:0)

实际上,要获取sampleArray2,您不需要lodash。一个简单的Array.prototype.filter就足够了:

let sampleArray1 = [
  {
    "name":"Raman",
    "prdList":[
      {
        "p_code":"20",
        "crtList":[
          {
            "c_code":"087"
          }
        ]
      }
    ]
  },
  {
    "name":"Laxman",
    "prdList":[
      {
        "p_code":"10"
      }
    ]
  },
  {
    "name":"raj",
    "prdList":[
      {
        "p_code":"202"
      }
    ]
  },
  {
    "name":"raghav",
    "prdList":[
      {
        "p_code":"30",
        "crtList":[
          {
            "c_code":"97"
          }
        ]
      }
    ]
  }
];

let result = sampleArray1.filter(function(x) {
  return hasCrtList(x.prdList);
});

function hasCrtList(prdList) {
  for (var i in prdList) {
    if (prdList[i].crtList) {
      return true;
    }
  }
  return false;
}

console.log(result);

答案 1 :(得分:0)

我知道为时已晚,但是我认为这对其他开发人员很有用。您可以使用Lodash仅用一行代码即可轻松实现这一目标。

_.differenceWith(fullArrayOfObjects, subsetArrayOfObjects, _.isEqual)

此函数将返回不在subsetArrayOfObjects中的缺少的对象数组。希望对您有所帮助。