gpt4 book ai didi

javascript - 索引中存在间隙的数组是否会带来弥补其缺点的任何好处

转载 作者:搜寻专家 更新时间:2023-11-01 04:23:32 25 4
gpt4 key购买 nike

在 Javascript 中,数组的索引可能有间隙,不应将其与简单的 undefined 元素混淆:

var a = new Array(1), i;
a.push(1, undefined);

for (i = 0; i < a.length; i++) {
if (i in a) {
console.log("set with " + a[i]);
} else {
console.log("not set");
}
}

// logs:
// not set
// set with 1
// set with undefined

由于这些间隙会破坏长度属性,我不确定是否应尽可能避免它们。如果是这样,我会将它们视为边缘情况,而不是默认情况:

// default:
function head(xs) {
return xs[0];
}

// only when necessary:
function gapSafeHead(xs) {
var i;

for (i = 0; i < xs.length; i++) {
if (i in xs) {
return xs[i];
}
}
}

除了head 非常简洁之外,另一个优点是它可以用于所有类数组数据类型。 head 只是一个简单的例子。如果需要在整个代码中考虑此类差距,则开销应该很大。

最佳答案

这很可能出现在任何重载哈希表以提供通俗称为“数组”的东西的语言中。 PHP、Lua 和 JavaScript 就是三种这样的语言。如果您依赖于严格的顺序数字数组行为,那么这会给您带来不便。更一般地说,该行为也提供了便利。

这里有一道经典的算法题:从数据结构的中间删除一个成员,哪种数据结构“更好”:链表还是数组?

你应该说“链表”,因为从链表中删除一个节点不需要你将数组的其余部分向下移动一个索引。但是链表还有其他缺陷,那么我们可以使用另一种数据结构吗?您可以使用稀疏数组*。

在许多提供这种散列数组类型的语言中,删除数组的任意成员都会改变长度。不幸的是,JavaScript 不会改变长度,所以你会损失一点。但是尽管如此,该数组“更短”,至少从 Object.keys 的 Angular 来看是这样。

*许多sparse arrays是使用链表实现的,所以不要太笼统地应用它。不过,在这些语言中,它们是具有可预测的有序数字键的哈希表。

关于javascript - 索引中存在间隙的数组是否会带来弥补其缺点的任何好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34641806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com