如何在数组Angular JS中删除对象?

时间:2017-02-02 17:36:01

标签: angularjs

我有一个对象:

$scope.obj = {
  name : "ok",
  list : [{object},{object2}]
}

所以,我有{object1}。如果我不知道密钥,如何从list中删除此对象?

我的代码是:

var indexToDelete = list.people.keys(item);
console.log(indexToDelete);
delete list.people[indexToDelete];

项目是:

Object
$$hashKey:
"object:29"
artist:""
cover:""
song:"Basta 1"
source:""
type:"9"

4 个答案:

答案 0 :(得分:0)

为了清晰起见,我将稍微简化一下您的数据结构。我还假设可以使用$$hashKey来确定要删除的对象是否与列表中的对象相同 - 如果不是这样,我们需要比较所有键和对象中的参数,答案得到了更多complex

鉴于这些假设,这里有一个vanilla javascript版本,应该适用于所有当前浏览器:

var list = [
    {$$hashKey: 1,  artist: "Alice"},
    {$$hashKey: 42, artist: "Bob"},
    {$$hashKey: 25, artist: "Charlie"}
];

var itemToRemove = {$$hashKey: 42, artist: "Bob"};

for (var i=0; i<list.length;i++) {
  if (list[i].$$hashKey == itemToRemove.$$hashKey) {
    list.splice(i,1); // removes the matched element
    i = list.length;  // break out of the loop. Not strictly necessary
  }
}

console.log(list);

如果itemToRemove是对列表中对象的引用,则可以稍微简化一下;在这种情况下,您可以直接比较它们,而不是依赖于$$hashKey

var obj1 = {$$hashKey: 1,  artist: "Alice"},
    obj2 = {$$hashKey: 42, artist: "Bob"},
    obj3 = {$$hashKey: 25, artist: "Charlie"};

var list = [obj1, obj2, obj3];
var itemToRemove = obj2;

for (var i=0; i<list.length;i++) {
  if (list[i] === itemToRemove) {
    list.splice(i,1); // removes the matched element
    i = list.length;  // break out of the loop. Not strictly necessary
  }
}

console.log(list);

(如果您是从ES6进行转换,那么有很多新的便捷方法可供使用,因此您无需手动迭代阵列:array.prototype.findIndexarray.prototype.filter,但这些是目前在足够的浏览器中不支持在生产中使用。或者,如果您愿意添加诸如underscore.js之类的库,则可以使用_.without()删除特定元素。)

答案 1 :(得分:0)

尝试数组splice()方法。

splice() 方法通过删除现有元素和/或添加新元素来更改数组的内容。

工作演示:

var obj = {
    name : "ok",
    list : [
          {"name":"abc"},
          {"name":"xyz"}
    ]
}

obj.list.splice(0, 1); 

console.log(obj);

答案 2 :(得分:0)

有两种情况  1.如果您已经从数组中删除了相同的值,请执行此操作

$scope.obj.list.splice(0,1);

2。如果要修复你要删除数组的第一个元素,那么执行此操作

Raven.getStoredInstance().addBuilderHelper(eventBuilder -> {
  UserInterface userInterface = new UserInterface(MDC.get("userid"), null, MDC.get("ip"), null);
  eventBuilder.withSentryInterface(userInterface);
});

答案 3 :(得分:-1)

您可以使用clojure.core关键字,然后使用需要删除的属性。

因此,如果您需要删除delete,首先,使用Object1方法在列表中找到索引,然后您可以使用findIndex

delete

注意:var indexToDelete = $scope.obj.list.findIndex(YourCriteria); delete $scope.obj.list[indexToDelete];是ES7草案规范的一部分,因此某些浏览器可能不支持此方法。

<强> EDIT1: 为了更清晰,findIndex方法采用为数组中的每个值调用的回调。