是否可以删除某个位置的数组元素,而无需重新排列索引,并且该位置不会更改为未定义?
我认为删除或拼接不可能吗?
我需要一种准确的方法来查看数组的长度,而无需重新排列索引。
我不想使用拼接,因为我有一个对象具有映射到表格(Punkt)的实际X,Y点的特定位置。
UPDATE:实际上,知道数组元素是否仅存在于未定义的值中也可能对我有所帮助,是否有更简单的方法可以循环使用?
var keys = Object.keys(racks);
for (var i = 0; i < keys.length; i++)
{
for (var x = 0; x < racks[keys[i]].punkt.length; x++)
{
if(racks[keys[i]].punkt[x].y == fullName)
{
//delete racks[keys[i]].punkt[x];
racks[keys[i]].punkt.splice(x,1);
console.log(keys[i] + " : " + racks[keys[i]].punkt.length);
}
}
}
答案 0 :(得分:4)
我认为删除或拼接不可能吗?
我需要一种准确的方法来查看数组的长度,而无需重新排列索引。
然后delete
,从数组中检索时hasOwnProperty
或in
保护,以及计算元素的循环(或保持跟踪的单独变量)是唯一的方法。 JavaScript的标准数组本质上是稀疏(因为它们是not really arrays at all),它们可能在没有条目的地方有间隙。要创建间隙,请使用delete
删除数组条目。
示例:
// Setup
var a = ["a", "b", "c", "d"];
console.log(a.length); // 4
// Using delete
delete a[2]; // Delete the entry containing "c"
console.log(a.length); // Still 4
a.hasOwnProperty(2); // false
// Using the guard when getting an entry
if (a.hasOwnProperty(2)) { // Or `if (2 in a)`
// Get and use [2]
}
else {
// Do whatever it is you want to do when the array doesn't have the entry
}
// Finding out how many it *really* has:
var key;
var count = 0;
for (key in a) {
if (a.hasOwnProperty(key) && // See below
/^0$|^[1-9]\d*$/.test(key) &&
key <= 4294967294
) {
++count;
}
}
console.log(count); // 3
有关循环中if
背后的详细信息,请参阅this other answer。如果您从未在数组上放置非元素属性,则可以跳过if
的第二和第三部分。
答案 1 :(得分:1)
这完美无缺。
var delrow = window.event.srcElement;
while ((delrow = delrow.parentElement) && delrow.tagName != "TR");
delrow.parentElement.removeChild(delrow);
答案 2 :(得分:0)
var punten = racks[keys[i]].punkt.length;
if(racks[keys[i]].punkt[x].y == fullName)
{
delete racks[keys[i]].punkt[x];
punten--;
}
if(punten==0)
{
console.log("Could have removed device: " + keys[i]);
}