带键的数组对象不好吗? (混合关联数组样式)
Are Array object with keys bad? (mixed associative array style)
在最近的一个项目中,我需要有序的条目和一个特殊的集合类型 属性,这就是我最终得到的:
var array=['a','b'];
array.type = 'alphabet';
console.log(array);
//["a", "b", type: "alphabet"]
到目前为止一切正常,
我没有找到很多关于这种数组的文档,这种设计有什么缺点吗?
从技术上讲,这是可行的。如果它满足您的需求,我真的不明白您为什么不使用它。
但是,有几点需要牢记:
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`
这意味着,如 deceze 所述,如果您需要序列化数据,您将 运行 遇到问题。
但是,如果不是这种情况,那么这个数据结构就可以正常工作。
这恰好在Javascript的范围内工作,但考虑到这个数据结构可能会遍历系统和序列化计划和同样的事情在其他任何地方都行不通。您应该将数据结构 "neutral" 保持为跨多个系统都能理解的形式;按预期使用 array 和 object 数据结构。 Lists 和 maps 是目前普遍理解的概念,并且到处都得到支持;这两者的混合不一定而且可能会使您难以将数据传输到其他系统。即使您只需要 序列化 Javascript 中的数据(例如存储在 cookie 中),您也会 运行 遇到问题。
您应该以同样有效且普遍理解的格式简单地表达您的数据:
{ type: 'alphabet', values: ['a', 'b'] }
在最近的一个项目中,我需要有序的条目和一个特殊的集合类型 属性,这就是我最终得到的:
var array=['a','b'];
array.type = 'alphabet';
console.log(array);
//["a", "b", type: "alphabet"]
到目前为止一切正常,
我没有找到很多关于这种数组的文档,这种设计有什么缺点吗?
从技术上讲,这是可行的。如果它满足您的需求,我真的不明白您为什么不使用它。
但是,有几点需要牢记:
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`
这意味着,如 deceze 所述,如果您需要序列化数据,您将 运行 遇到问题。
但是,如果不是这种情况,那么这个数据结构就可以正常工作。
这恰好在Javascript的范围内工作,但考虑到这个数据结构可能会遍历系统和序列化计划和同样的事情在其他任何地方都行不通。您应该将数据结构 "neutral" 保持为跨多个系统都能理解的形式;按预期使用 array 和 object 数据结构。 Lists 和 maps 是目前普遍理解的概念,并且到处都得到支持;这两者的混合不一定而且可能会使您难以将数据传输到其他系统。即使您只需要 序列化 Javascript 中的数据(例如存储在 cookie 中),您也会 运行 遇到问题。
您应该以同样有效且普遍理解的格式简单地表达您的数据:
{ type: 'alphabet', values: ['a', 'b'] }