要根据特定属性从数组中删除对象,请使用原生 JavaScript 方法,避免拼接过程中因长度减小而导致的问题
首先确定要删除的对象,并将其存储在变量中,例如listToDelete。接下来,迭代对象数组 (arrayOfObjects) 并检查对象的 ID 属性是否与 listToDelete 中的任何 ID 匹配。如果找到匹配项,请使用 splice 从 arrayOfObjects 中删除该对象。
要解决拼接操作期间长度递减的问题,请在每次删除对象时递减 i 变量。或者,将要保留的元素写入数组:
<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); ... if (setToDelete.has(obj.id)) {...}
最后,封装逻辑在可重用函数中以方便使用:
<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>
这种方法通过匹配对象的属性值来有效地从数组中删除对象,并通过避免线性时间操作来确保最佳性能。
以上是如何根据属性值高效地从数组中删除对象?的详细内容。更多信息请关注PHP中文网其他相关文章!