我有一个这样的对象数组:
var myArr = [
MyObject(name: "Abc", description: "Lorem ipsum 1."),
MyObject(name: "Def", description: "Lorem ipsum 2."),
MyObject(name: "Xyz", description: "Lorem ipsum 3.")
]
我知道我可以找到匹配的项目,如下所示:
var temp = myArr.filter { $0.name == "Def" }.first
但是现在如何将其从原始文件中删除myArr
?我希望filter.first
可以以某种方式返回索引,以便可以使用removeAtIndex
。或者更好的是,我想做这样的事情:
myArr.removeAll { $0.name == "Def" } // Pseudo
有任何想法吗?
您不了解的是Array是一个结构,因此 是一个值类型
。它不能像类实例那样在适当位置进行突变。因此,即使您扩展Array来编写一个变异removeIf
方法,您也将始终在幕后创建一个新的数组。
因此,使用filter
闭包条件不会造成任何不利影响,也不会失去通用性:
myArr = myArr.filter { $0.name != "Def" }
例如,您 可以这样 编写removeIf
:
extension Array {
mutating func removeIf(closure:(T -> Bool)) {
for (var ix = self.count - 1; ix >= 0; ix--) {
if closure(self[ix]) {
self.removeAtIndex(ix)
}
}
}
}
然后您可以像这样使用它:
myArr.removeIf {$0.name == "Def"}
但是实际上,这是浪费大量时间。您在这里filter
没有做的事情没有做。从语法上可能会
出现myArr.removeIf
您正在突变myArr
的地方,但实际上并非如此。您正在用另一个数组替换它。实际上,该循环中的 每个
调用removeAtIndex
都会创建另一个数组!因此,您不妨使用filter
并感到高兴。
我有一组对象,看起来像: 如果系列属性值与数组中其他对象中的另一个系列属性值匹配,则需要从数组中删除该对象。 目前,我尝试使用以下方法将其推送到重复阵列: 但这不起作用。从例子来看,我的问题是我没有一个确定的重复值列表来寻找。 任何帮助都将不胜感激。
问题内容: 文件: 有没有办法从数组中提取特定对象?IE如何从项数组中提取ID为23的整个项对象。 我努力了: 但是我很确定我没有正确使用’pull’。据我了解,pull将从数组中拉出字段,而不是对象。 关于如何将整个对象从数组中拉出的任何想法。 另外,我尝试在mongoose / nodejs中执行此操作,也不确定这种类型的内容是否在mongoose API中,但我找不到它。 问题答案: 尝试.
问题内容: 我需要从满足条件的数组中删除对象,我可以根据条件更新数组的对象,如下所示: 这正在工作 为了删除我正在这样做 但这不起作用,并给出此错误, ElasticsearchIllegalArgumentException [无法执行脚本]; 嵌套:ConcurrentModificationException; 错误:ElasticsearchIllegalArgumentException
假设对象数组如下所示: 如果标签和颜色相同,则会出现重复条目。在这种情况下,id=1和id=5的对象是重复的。 根据注释中的请求,这里是期望的结果:
问题内容: 如何通过匹配对象属性从数组中删除对象? 请只使用本机JavaScript。 我在使用接头时遇到麻烦,因为每次删除的长度都会减少。使用克隆并在原始索引上进行拼接仍然会给您带来长度减少的问题。 问题答案: 我以为你用过这样的东西? 修复bug所需要做的就是在下一次减少,然后(也可以选择向后循环): 为了避免线性时间删除,可以编写要 保留 在数组上的数组元素: 为了避免在现代运行时中进行线性
问题内容: 如何从数组中删除对象?我想删除,其中包括名称的对象从。例如: 我要实现: 问题答案: 您可以使用多种方法从数组中删除项目: 如果要删除position处的元素,请使用: 要么 您可以使用或结合使用参见MDN从数组中删除一个或多个元素,例如