Array对象的键是坏的吗? (混合关联数组样式)

时间:2015-11-27 10:29:29

标签: javascript arrays associative-array

在最近的一个项目中,我需要有序的条目以及该集合的特殊类型属性,这就是我最终的结果:

var array=['a','b'];
array.type = 'alphabet';

console.log(array);
//["a", "b", type: "alphabet"] 

到目前为止它工作正常,

我没有找到关于这种阵列的大量文档,这种设计有什么缺点吗?

2 个答案:

答案 0 :(得分:2)

这恰好在Javascript的范围内工作,但考虑到这个 数据结构 可能会遍历系统和序列化方案,同样的事情在其他地方都不起作用。你应该保持你的数据结构"中立"以多种系统理解的形式;按预期使用数组对象数据结构。 列表地图是现在普遍理解的概念,并且在任何地方都受到支持;这两者的混合并非必然,并且可能使您难以将数据转换到其他系统。即使您只需要序列化 Javascript中的数据(例如存储在Cookie中),您也会遇到问题。

您应该以同样有效且普遍理解的格式表达您的数据:

{ type: 'alphabet', values: ['a', 'b'] }

答案 1 :(得分:1)

从技术上讲,这很有效。如果满足您的需求,我真的不明白为什么你不会使用它 但是,有几点需要注意:

JSON.stringify不会对这些属性进行字符串化,并且迭代数组的for循环只会在使用for...in时捕获这些属性:



var array = ['a','b'];
array.type = 'alphabet';

document.write('JSON.stringify(array)<br/>');
document.write(JSON.stringify(array));

document.write('<br/><br/>for in:<br/>');
for(var a in array)
    document.write(a + ': ' + array[a] + '<br/>'); // Will show `type`

document.write('<br/>"normal" for loop:<br/>')
for(var i = 0; i < array.length; i++)
    document.write(i + ': ' + array[i] + '<br/>'); // Will not show `type`
&#13;
&#13;
&#13;

这意味着,正如deceze所述,如果您需要序列化数据,则会遇到问题。
但是,如果不是这样,那么这个数据结构就可以了。