繁体   English   中英

如何比较两个数组对象的特定字符串?

[英]How to compare two array objects' particular string?

我对如何比较两个数组对象的特定值如何将被忽略的值作为一个数组感到困惑。

var Arr1 = [
 {
  jobId:"j1" 
 },
 {
  jobId:"j2" 
 },
 {
  jobId:"j3" 
 },
 {
  jobId:"j4" 
 },

]

var Arr2 = [
 {
  jobId:"j1" 
 },
 {
  jobId:"j2" 
 },

]

我想要这样的结果...

//neglected values

[
  {
  jobId:"j3" 
 },
 {
  jobId:"j4" 
 },
]
  • 因此,让我们考虑如何比较两个数组中的事物。
  • 为了完全比较两个数组,我们可能需要进行迭代,以确保我们比较每个数组中的每个项目,这样才能确保
  • 因此,如果我刚开始,我会想到嵌套for-循环。 为什么? 因为它将遍历第一个数组,所以在命中第一个数组的每个索引上,都将遍历第二个数组中的每个元素。
  • 那么您可以创建一些基本的条件逻辑,例如,如果Arr1 [i] === Arr2 [j],则将其中一个对象推入数组。

将第一个数组的元素过滤( Array#filterArray#filter为第二个数组中没有( ! )一些( Array#some )匹配作业ID的元素。

Arr1.filter(arr1Elt => !Arr2.some(arr2Elt => arr2Elt.jobId === arr1Elt.jobId))

使用逐行注释样式:

Arr1                             // From Arr1,
  .filter(                       // keep
    arr1Elt =>                   // elements for which 
      !                          // it is not the case that
      Arr2                       // Arr2 has
        .some(                   // some
          arr2Elt =>             // elements for which 
            arr2Elt.jobId        // the job ID
            ===                  // is equal to
            arr1Elt.jobId        // the job ID from the first array.
        )
  )

您可以使用lodash的_.differenceBy()查找Arr1缺少的Arr2的项目。

 var Arr1 = [{"jobId":"j1"},{"jobId":"j2"},{"jobId":"j3"},{"jobId":"j4"}]; var Arr2 = [{"jobId":"j1"},{"jobId":"j2"}]; // find items that are in Arr1, but not in Arr2, compare items by their jobId var result = _.differenceBy(Arr1, Arr2 , 'jobId'); console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.3/lodash.min.js"></script> 

您可以使用Array.prototype.filterARR1和检查,如果它的任何条目的使用是ARR2 Array.prototype.some -见下面的演示:

 var Arr1=[{jobId:"j1"},{jobId:"j2"},{jobId:"j3"},{jobId:"j4"}]; var Arr2=[{jobId:"j1"},{jobId:"j2"}]; var result = Arr1.filter(function(e){ return !Arr2.some(function(k){ return k.jobId === e.jobId; }); }); console.log(result); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM