Javascript 比较js中的mscrm GUI

Javascript 比较js中的mscrm GUI,javascript,dynamics-crm-2011,dynamics-crm,guid,Javascript,Dynamics Crm 2011,Dynamics Crm,Guid,有没有更好的/官方的方法,如何在JavaScript中比较CRM 2011 GUI 2e9565c4-fc5b-e211-993c-000c29208ee5=={2E9565C4-FC5B-E211-993C-000C29208EE5} 不使用.replace()和.toLowerCase() 第一个是通过XMLHttpRequest/JSON获得的: JSON.parse(r.responseText).d.results[0].id 第二个是从表格中得到的: Xrm.Page.getA

有没有更好的/官方的方法,如何在JavaScript中比较CRM 2011 GUI

2e9565c4-fc5b-e211-993c-000c29208ee5=={2E9565C4-FC5B-E211-993C-000C29208EE5}
不使用
.replace()
.toLowerCase()

第一个是通过XMLHttpRequest/JSON获得的:

JSON.parse(r.responseText).d.results[0].id 
第二个是从表格中得到的:

Xrm.Page.getAttribute("field").getValue()[0].id

在JavaScript中没有比较GUID的正式方法,因为没有基元GUID类型。因此,您应该将guid视为字符串

如果不能使用
replace()
toLowerCase()
可以使用正则表达式:

// "i" is for ignore case
var regExp = new RegExp("2e9565c4-fc5b-e211-993c-000c29208ee5", "i"); 

alert(regExp.test("{2E9565C4-FC5B-E211-993C-000C29208EE5}"));
它可能比replace/toLowerCase()慢。

您可以使用node uuid()库,在将字符串解析为字节后进行字节比较。字节以数组形式返回,可以使用lodash_u2;.difference方法进行比较。这将处理GUID不使用相同大小写或没有“-”破折号的情况

咖啡脚本:

compareGuids: (guid1, guid2) ->
    bytes1 = uuid.parse(guid1)
    bytes2 = uuid.parse(guid2)
    # difference returns [] for equal arrays
    difference = _.difference(bytes1, bytes2)
    return difference.length == 0
Javascript(更新):


replace()和toLowerCase()并不是被禁止的,但我觉得这不是正确的;当CRM以两种不同的形式返回相同的GUID时,我希望MS在SDK中提供一些方法。在我看来,您使用regex的解决方案需要更清晰的代码。我更喜欢JS中的代码示例和信息,以便下载其他库,但我使它工作正常,工作正常。在CRM表单上快速使用它似乎很复杂,但在大型项目中也可以使用它。谢谢函数删除分隔符,然后执行不区分大小写的比较。正则表达式可以放在函数体中。
compareGuids: function(guid1, guid2) {
    var bytes1, bytes2, difference;
    bytes1 = uuid.parse(guid1);
    bytes2 = uuid.parse(guid2);
    difference = _.difference(bytes1, bytes2);
    return difference.length === 0;
  }
var rgx = /[\{\-\}]/g;
function _guidsAreEqual(left, right) {
    var txtLeft = left.replace(rgx, '').toUpperCase();
    var txtRight = right.replace(rgx, '').toUpperCase();
    return txtLeft === txtRight;
};