我有一个对象:
$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"
答案 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.findIndex
,array.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
方法采用为数组中的每个值调用的回调。