在最近的一个项目中,我需要有序的条目以及该集合的特殊类型属性,这就是我最终的结果:
var array=['a','b'];
array.type = 'alphabet';
console.log(array);
//["a", "b", type: "alphabet"]
到目前为止它工作正常,
我没有找到关于这种阵列的大量文档,这种设计有什么缺点吗?
答案 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;
这意味着,正如deceze所述,如果您需要序列化数据,则会遇到问题。
但是,如果不是这样,那么这个数据结构就可以了。