根据对象属性从数组中删除对象
在 JavaScript 中,通过匹配特定属性从数组中删除对象可能具有挑战性。这是因为使用拼接方法(通常尝试这样做)会导致数组长度在删除时减小。
修复使用拼接方法
要解决此问题,您可以通过在删除发生时递减循环索引来实现修复:
<code class="javascript">for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) !== -1) { arrayOfObjects.splice(i, 1); i--; } }
覆盖数组元素
或者,您可以通过逐步避免线性时间删除覆盖您要保留的数组元素:
<code class="javascript">var end = 0; for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) === -1) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
用于查找的哈希集
为了高效查找,您可以使用哈希集:
<code class="javascript">const setToDelete = new Set(listToDelete); let end = 0; for (let i = 0; i < arrayOfObjects.length; i++) { const obj = arrayOfObjects[i]; if (setToDelete.has(obj.id)) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
辅助函数
将此方法封装到辅助函数中:
<code class="javascript">const filterInPlace = (array, predicate) => { let end = 0; for (let i = 0; i < array.length; i++) { const obj = array[i]; if (predicate(obj)) { array[end++] = obj; } } array.length = end; };</code>
以上是JavaScript中如何根据对象属性高效地从数组中删除对象?的详细内容。更多信息请关注PHP中文网其他相关文章!