【问题标题】:How to compare two array objects' particular string?如何比较两个数组对象的特定字符串?
【发布时间】:2016-12-23 18:18:46
【问题描述】:

我对如何比较两个数组对象的特定值将被忽略的值作为数组进行比较有点困惑。

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

]

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

]

我想要这样的结果...

//neglected values

[
  {
  jobId:"j3" 
 },
 {
  jobId:"j4" 
 },
]

【问题讨论】:

    标签: javascript arrays object lodash


    【解决方案1】:
    • 那么让我们考虑一下如何比较两个数组中的内容。
    • 假设为了完全比较两个数组,我们需要迭代它们,确保比较每个数组中的每一项,这样我们才能确定
    • 所以如果我开始我会考虑嵌套 for - 循环。为什么?因为它会遍历第一个数组,所以在每个索引到达第一个数组时,它会遍历第二个数组中的每个元素。
    • 然后您可以创建一些基本的 if 条件逻辑,例如 if Arr1[i] === Arr2[j],将其中一个对象推入数组中。

    【讨论】:

    • @torazaburo 对高级用户有更好的答案,但考虑到 OP 只是在学习,这个答案更好。
    • @RayfenWindspear 我同意,他的回答更好,我故意这样做是因为他说他正在开始。我只是想概述一个解决方案,因为我记得当我开始可视化双 for 循环时,它帮助我更好地理解了事情。过滤掉它,肯定是一种更聪明的方法。
    【解决方案2】:

    过滤 (Array#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.
            )
      )
    

    【讨论】:

      【解决方案3】:

      您可以使用 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>

      【讨论】:

        【解决方案4】:

        您可以在 Arr1 上使用 Array.prototype.filter 并使用 Array.prototype.some 检查其是否有任何条目在 Arr2 中 - 请参见下面的演示:

        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);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-02-09
          • 1970-01-01
          • 2020-04-24
          相关资源
          最近更新 更多