【问题标题】:Delete an object based on property根据属性删除对象
【发布时间】:2016-09-29 20:27:04
【问题描述】:

我有两个数组。

_ARRAY_OF_FUTURE_USERS = []; // Array of objects with a property useruid
pastLikedUsersArray = []; // Array of strings

如果其中一个对象的属性值位于 pastLikedUsersArray 字符串中,我想从 _ARRAY_OF_FUTURE_USERS 中删除一个对象。

我有一个 for 循环,它遍历两个数组的长度,然后是下面的这个拼接方法。

_ARRAY_OF_FUTURE_USERS.splice(pastLikedUsersArray[j], 1);

但是,我认为它是将对象与字符串进行比较,因此不会删除。我怎样才能实现我想要的?

我也试过了:

_ARRAY_OF_FUTURE_USERS[i].useruid.splice(pastLikedUsersArray[j], 1);

这没用

useruid 是 _ARRAY_OF_FUTURE_USERS 中的属性之一,其值是字符串,类似的字符串可能在另一个数组中。 我收到一个错误,说它不是函数。

事实上,经过更多挖掘,似乎是删除了一个而不是正确的一个,这很奇怪

【问题讨论】:

  • splice 的第一个参数应该是元素的索引

标签: javascript arrays splice


【解决方案1】:

试试这个:

for (var i=0; i<_ARRAY_OF_FUTURE_USERS.length; i++) {
   if (pastLikedUsersArray.indexOf(_ARRAY_OF_FUTURE_USERS[i].useruid) != -1) {
      _ARRAY_OF_FUTURE_USERS.splice(i, 1);
      i--;
   }
}

或使用过滤器:

_ARRAY_OF_FUTURE_USERS = _ARRAY_OF_FUTURE_USERS.filter(function(user) {
     return pastLikedUsersArray.indexOf(user.useruid) != -1;
});

【讨论】:

  • 这看起来很有希望。我应该 console.log out 看看哪一部分被删除了?
  • 在第一个你应该console.log(_ARRAY_OF_FUTURE_USERS[i])在第二个我认为你看不到哪个被删除但你可以在过滤器之前和之后运行console.log(_ARRAY_OF_FUTURE_USERS.slice())并检查差异。跨度>
猜你喜欢
  • 2013-02-23
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多