Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在什么情况下,您会选择使用贴图而不是普通数组?_Javascript_Ecmascript 6 - Fatal编程技术网

Javascript 在什么情况下,您会选择使用贴图而不是普通数组?

Javascript 在什么情况下,您会选择使用贴图而不是普通数组?,javascript,ecmascript-6,Javascript,Ecmascript 6,我很难找到一个真实的情况,因为最好使用地图而不是普通数组。似乎每次都很难使用 你试验过合适的案例吗 谢谢。以汽车经销商为例。 如果您想要一个所有客户的列表,您应该使用一个普通数组,因为您只需要一个元素列表 var myArray=['Walter','Jesse','Saul'] 但是,假设您希望存储客户所在的州以及他们的姓名,那么您希望使用地图,以便数据之间存在相关性(否则您只需要随机列出姓名和州) var myMap=newmap(['Walter','Arizona',['Jesse','

我很难找到一个真实的情况,因为最好使用地图而不是普通数组。似乎每次都很难使用

你试验过合适的案例吗


谢谢。

以汽车经销商为例。 如果您想要一个所有客户的列表,您应该使用一个普通数组,因为您只需要一个元素列表

var myArray=['Walter','Jesse','Saul']

但是,假设您希望存储客户所在的州以及他们的姓名,那么您希望使用地图,以便数据之间存在相关性(否则您只需要随机列出姓名和州)

var myMap=newmap(['Walter','Arizona',['Jesse','Florida',['Saul','ohoio'])

请原谅我的地理位置,但我不是美国人P


编辑:添加了正确的
映射
声明。

当您想要创建将键映射到值的数据结构时,使用映射,这对我很有用,即在自然语言处理期间,我们有不同的命令必须绑定到关键字,然后可以通过这些关键字直接访问,而数组只是一个容器,它的内容包含和索引。
如果要访问数组的内容,则需要指定索引或运行条件比较以查找查询

V8引擎堆不太擅长管理对象数组。 如果有100000个对象的数组,则循环遍历每个对象并在中间删除一个参数,然后重新添加它,堆大小将尖峰而不是保持不变。

// Spike the memory heap
arr.forEach(obj => {let temp = obj[0]; delete obj[0]; obj[0] = temp})
堆将尖峰的原因是V8在数组上的forEach循环期间创建了中间数组。一旦正在循环的阵列变得庞大(例如100000个元素),内存峰值将过大,无法处理,并可能导致程序崩溃

引擎不会以这种方式处理Map和Set等易位,您可以使用类似于库的方法为它们获取类似数组的转换方法。

As,
Map
具有许多技术优势,而一个简单的
array
Object
就可以满足简单数据结构的需要,通常,现代web开发的复杂性越来越高,需要使用其他东西

让我们看几个具体的例子:

地图的键可以是任何东西

在现代图书馆和webapps中,都经常使用它来降低重复操作的性能成本。简而言之,记忆是指在第一次运行后,为给定输入存储给定函数的输出。
地图是存储这些数据的最佳选择,因为您可以使用它们,而无需考虑索引依据

const cache=newmap();
常量输入=[2,3,2];//为了简单起见,假设这是不可变的
函数昂贵(n,…args){
如果(!args.length)返回n;
返回Math.pow(n,昂贵(…args));
}
功能(arr){
const memoResult=cache.get(arr);
如果(记忆结果){
console.log('used memo',memoResult);
返回记忆结果;
}
常数结果=昂贵(…arr);
console.log('计算',结果);
cache.set(arr,result);
返回结果;
}
备忘录(输入);

备忘录(输入)它们有不同的用途。映射和数组根本不一样。贴图允许使用键进行选择,这些键可以是任何参考值或基本值。此外,通过WeakMap,您可以利用高效的垃圾收集。我认为更好的问题是,你认为是什么使它们可以互换?这里有一系列使用Map的理由。这对后代来说是一个重大问题。真遗憾它关门了。在S.O.上有很多类似的高投票率的问题。我想他们指的是地图,一个可编辑的类@哮喘我不明白你的意思。我谈到了相同的
Map
right?中间数组?为何这里唯一不利于内存使用的操作就是使用
delete
操作符。你有详细解释的链接吗?