首先:我正在使用一个相当模糊的javascript嵌入式实现作为Adobe InDesign CS3的脚本引擎。该实现有时偏离“标准”。 javascript,因此我的问题。

我正在使用 John Resig的jsdiff库 source here )比较两个文档之间的文本选择。 jsdiff使用vanilla对象作为关联数组,将文本中的单词映射到另一个对象。 (参见第129行的jsdiff.js中的“ns”和“os”变量。)

当“反映”一词时,我的头痛开始了。在文中出现。 "反映"是所有对象上的默认只读属性。当jsdiff尝试将关联数组的值分配给ns ['reflect']时,一切都会爆炸。

我的问题:这有什么办法吗?有没有办法在不使用明显的vanilla对象的情况下在javascript中执行哈希表?

基本规则:切换脚本引擎不是一种选择。 :)

有帮助吗?

解决方案

你可能会“提出错误的问题”。 (正如Raymond Chen所说);而不是试图避免使用vanilla对象,尝试更改关联数组成员的命名方式。

我试图接近这个的方式:而不是有一个数组成员ns [" reflect"],改变jsdiff构建数组的方式,以便成员是ns [" _reflect“]或某些其他变种。

其他提示

如果您使用的JS实现支持对象的hasOwnProperty方法,则可以使用它来测试是否已为对象显式设置属性,或者属性是否从其原型继承。例如:

if(object.hasOwnProperty('testProperty')){
     // do something
}

javascript中给定的对象只是关联数组,实际上没有另一个内置的哈希解决方案。您可以通过在某些数组周围包装类来创建自己的psuedo哈希表,尽管在涉及手动工作时可能会有显着的性能损失。

只是附注,我还没有真正使用或查看过jsdiff库,因此根据提示或技巧我无法提供任何有效的见解。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top