如何从另一个对象列表中删除对象列表

时间:2018-09-27 18:51:59

标签: javascript json

我有两个列表json,一个叫做 subscribers ,另一个叫做关注

以下

{ 
  0: { id: "u0", username: "user0", avatar: "user0.png" },
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  2: { id: "u2", username: "user2", avatar: "user2.png" },
  3: { id: "u3", username: "user3", avatar: "user3.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" },
  5: { id: "u5", username: "user5", avatar: "user5.png" }
}

订户

{ 
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" }
}

我想从以下 [ following - subscribers = remaining list of following ]中删除 subscribers

如何删除它们取决于两个列表中每个对象的id属性?

3 个答案:

答案 0 :(得分:2)

如果您的密钥与您的ID对齐:

f = {
  0: { id: "u0", username: "user0", avatar: "user0.png" },
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  2: { id: "u2", username: "user2", avatar: "user2.png" },
  3: { id: "u3", username: "user3", avatar: "user3.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" },
  5: { id: "u5", username: "user5", avatar: "user5.png" }
}

s = {
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" }
}

for( i in s ){
  delete f[i]
}

答案 1 :(得分:1)

使用lodash很有帮助: _.pullBy(以下信息,订阅者,“ id”)

答案 2 :(得分:1)

一种方法是在跟随者的键(或值)上使用Array.prototype.reduce,以基于未出现在订阅者中的条目创建新对象:

let followers = {
  0: { id: "u0", username: "user0", avatar: "user0.png" },
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  2: { id: "u2", username: "user2", avatar: "user2.png" },
  3: { id: "u3", username: "user3", avatar: "user3.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" },
  5: { id: "u5", username: "user5", avatar: "user5.png" }
}

let subscribers = {
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" }
}

followers = Object.keys(followers).reduce((acc, current) => !Object.values(subscribers).some(sub => sub.id === followers[current].id) ? {...acc, [current]: followers[current]} : acc, {})
console.log(followers)

或者您可以迭代关注者的键并删除“重复项”:

let followers = {
  0: { id: "u0", username: "user0", avatar: "user0.png" },
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  2: { id: "u2", username: "user2", avatar: "user2.png" },
  3: { id: "u3", username: "user3", avatar: "user3.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" },
  5: { id: "u5", username: "user5", avatar: "user5.png" }
};

let subscribers = {
  1: { id: "u1", username: "user1", avatar: "user1.png" },
  4: { id: "u4", username: "user4", avatar: "user4.png" }
};

Object.keys(followers).forEach(current => {
  if (Object.values(subscribers).some(sub => sub.id === followers[current].id)) {
    delete followers[current];
  }
});
console.log(followers);