搜尋

首頁  >  問答  >  主體

javascript - 一個是數組,一個是對象,要怎麼比較去重?

1

2

<code>var arr=[{'id':1,'name':1},{'id':2,name:2},{'id':3,'name':3}];

var obj = {'id':2,'name':2};</code>

請問這個arr 和obj怎麼做對比,發現重複id2後,去掉arr這個陣列物件id:2,並產生一個新的陣列?

仅有的幸福仅有的幸福2824 天前917

全部回覆(4)我來回復

  • 给我你的怀抱

    给我你的怀抱2017-07-05 10:55:25

    用陣列的filter過濾一下就產生新的陣列了。
    另外,題目裡的 數組第二個 'id:2'語法錯誤,引號位置不對

    1

    2

    3

    <code>var res = arr.filter(function(e){

        return e.id!=obj.id

    })</code>


    下面是我的腦洞:萬一題主要的是鍵值對都重複才過濾呢…(有可能想太多了)

    考慮到可能你還想保證數組裡面元素的鍵值對跟obj的鍵值對必須完全一樣的話:可以考慮這樣

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    <code>var arr=[{'id':1,'name':1},{id:2,name:3},{'id':3,'name':3}];

    var arr2=[{'id':1,'name':1},{id:2,name:2},{'id':3,'name':3}];

    var obj = {'id':2,'name':2};

    var res = arr.filter(function(e){//

      var result = true; //作为过滤标识

      for(var key in obj){//遍历obj的键值

          if(e[key]!=obj[key]){//如果出现键值相同当值不同,就不算重复

               result = true;

              break;

          }

          //如果上面条件不通过,那就表示键值重复

          result = false;

       }//遍历到最后,如果键值都重复,那result肯定是false,否则必然出现result=true的情况

       return result;

    });

    var res2 = arr.filter(function(e){

      var result = true;

      for(var key in obj){

          if(e[key]!=obj[key]){

               result = true;

              break;

          }

          result = false;

       }

       return result;

    });</code>

    回覆
    0
  • PHP中文网

    PHP中文网2017-07-05 10:55:25

    雷雷

    回覆
    0
  • 迷茫

    迷茫2017-07-05 10:55:25

    雷雷

    回覆
    0
  • 为情所困

    为情所困2017-07-05 10:55:25

    Array.prototype.filter()

    雷雷

    回覆
    0
  • 取消回覆