在数组元素上使用delete运算符与使用array.splice方法有什么区别?
例如:
myArray = ['a', 'b', 'c', 'd'];
delete myArray[1];
// or
myArray.splice (1, 1);
如果我可以像删除对象那样删除数组元素,为什么还要使用拼接方法?
在数组元素上使用delete运算符与使用array.splice方法有什么区别?
例如:
myArray = ['a', 'b', 'c', 'd'];
delete myArray[1];
// or
myArray.splice (1, 1);
如果我可以像删除对象那样删除数组元素,为什么还要使用拼接方法?
当前回答
我有两种方法。
简单的一个:
arr = arr.splice(index,1)
第二个:
arr = arr.filter((v,i)=>i!==index)
第二种方法的优点是可以删除一个值(所有值,而不是像大多数情况一样只删除第一个实例)
arr = arr.filter((v,i)=>v!==value)
其他回答
目前有两种方法可以做到这一点
使用夹板()arrayObject.spling(索引,1);使用deletedelete arrayObject[index];
但我始终建议对数组对象使用拼接,对对象属性使用删除,因为删除不会更新数组长度。
拼接将使用数字索引。
而delete可以用于其他类型的索引。。
例子:
delete myArray['text1'];
我有两种方法。
简单的一个:
arr = arr.splice(index,1)
第二个:
arr = arr.filter((v,i)=>i!==index)
第二种方法的优点是可以删除一个值(所有值,而不是像大多数情况一样只删除第一个实例)
arr = arr.filter((v,i)=>v!==value)
从核心JavaScript 1.5参考>运算符>特殊运算符>删除运算符:
删除数组元素时数组长度不受影响。对于例如,如果删除[3],则[4]为仍然a[4]和a[3]未定义。这即使删除最后一个数组的元素(删除a[a.length-1])。
如果您想要迭代一个大数组并选择性地删除元素,那么每次删除都调用splice()将非常昂贵,因为splice(()每次都必须重新索引后续元素。因为数组在Javascript中是关联的,所以删除单个元素然后重新索引数组会更有效。
您可以通过构建一个新阵列来实现这一点。例如
function reindexArray( array )
{
var result = [];
for( var key in array )
result.push( array[key] );
return result;
};
但我认为您不能修改原始数组中的键值,这会更有效——看起来您可能需要创建一个新数组。
请注意,您不需要检查“未定义”条目,因为它们实际上并不存在,for循环也不会返回它们。这是数组打印的产物,将它们显示为未定义。它们似乎不存在于记忆中。
如果您可以使用slice()之类的方法,这会很好,因为它会更快,但不会重新索引。有人知道更好的方法吗?
实际上,您可能可以按以下方式就地执行,这可能更高效、更具性能:
reindexArray : function( array )
{
var index = 0; // The index where the element should be
for( var key in array ) // Iterate the array
{
if( parseInt( key ) !== index ) // If the element is out of sequence
{
array[index] = array[key]; // Move it to the correct, earlier position in the array
++index; // Update the index
}
}
array.splice( index ); // Remove any remaining elements (These will be duplicates of earlier items)
},