亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

比較郵遞員中的兩個 API 響應時如何忽略 javascript 中的大小寫?

比較郵遞員中的兩個 API 響應時如何忽略 javascript 中的大小寫?

喵喔喔 2022-12-08 15:51:52
我正在使用下面的函數來比較兩個 API 響應,但有些鍵具有相同的值,但大小寫不同,而不是它報告的差異。如何避免這種區分大小寫?var difference = (object, base) => {    function changes(object, base) {        return _.transform(object, function(result, value, key) {            if(!_.isEqual(value, base[key])) {                result[key] = (_.isObject(value) && _.isObject(base[key])) ? changes(value, base[key]) : value;            }        });    }    return changes(object, base);}我希望它在出現任何案例問題時不顯示差異。例如下面它不應該返回任何差異并認為它相同"content": “Data | 8GBor"content": “data | 8GB第一個 API 的響應[ {    "price": 20,    "planCategory": "Mobile Broadband",    "externalSkuId": “MBB”,    "planHeader": {},    "expiry": "14 days",    "includedData": 8,    "includedDataType": "GB",    "inclusionOption1": "Get 1GB bonus data on every automatic recharge when you opt-in. T&C apply.",    "inclusionHighlight": "8GB",    "inclusionOptions": [      {        "channels": [          "SELF_SERVICE",          "ESTORE"        ],        "type": {          "name": "DATA"        },        "content": "data | 8GB"      },      {        "channels": [          "SELF_SERVICE"        ],        "type": {          "name": "OTHER"        },        "content": "expiry|14 days"      }    ]  }]第二個 API 響應[ {    "price": 20,    "planCategory": "Mobile Broadband",    "externalSkuId": “MBB”,    "planHeader": {},    "expiry": "13 days",    "includedData": 8,    "includedDataType": "GB",    "inclusionOption1": "Get 2GB bonus data on every automatic recharge.",    "inclusionHighlight": "8GB",    "inclusionOptions": [      {        "channels": [          "SELF_SERVICE",          "ESTORE"        ],        "type": {          "name": "DATA"        },        "content": “Data | 8GB"      },      {        "channels": [          "SELF_SERVICE"        ],        "type": {          "name": "OTHER"        },        "content": “Expiry|14 days"      }    ]  }]
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻1850條經驗 獲得超11個贊

將 Intl.Collator 與 一起使用sensitivity: 'base',這意味著等效字母的權重相同。效率比toLower. 這是一個非常高效的對象比較器,它不需要 toLower 或 JSON.stringify 并且在屬性為字符串時忽略大小寫。


const  compareStr = new Intl.Collator(undefined, { sensitivity: 'base' }).compare;


const compare = (obj1, obj2) =>

  Array.isArray(obj1)

    ? Array.isArray(obj2) && obj1.length === obj2.length && obj1.every((item, index) => compare(item, obj2[index]))

    : obj1 instanceof Date

    ? obj2 instanceof Date && obj1.getDate() === obj2.getDate()

    : obj1 && typeof obj1 === 'object'

    ? obj2 && typeof obj2 === 'object' &&

      Object.getOwnPropertyNames(obj1).length === Object.getOwnPropertyNames(obj2).length &&

      Object.getOwnPropertyNames(obj1).every(prop => compare(obj1[prop], obj2[prop]))

    : typeof obj1 === 'string' && typeof obj2 === 'string'

    ? compareStr(obj1, obj2) === 0

    : obj1 === obj2;


console.log(compare({ prop: 'a' }, { prop: 'A' }));


console.log(compare(['b'], ['B']));


console.log(compare('a', 'A'));


console.log(compare('B', 'b'));


console.log(compare('B', 'a'));


console.log(compare('Mismatched case', 'MisMatched Case'));


查看完整回答
反對 回復 2022-12-08
?
慕的地6264312

TA貢獻1817條經驗 獲得超6個贊

使用下面的方法僅將管道符號左側的“內容”轉換為小寫。


//Change to lower case from left side of | sign for content

jsonObject1.forEach(function(value, index) {

    if (value.inclusionOptions) {

        value.inclusionOptions.forEach(function(value2, index2) {

            var tokens = value2.content.split('|');

            value2.content = tokens[0].toLowerCase() + "|" + tokens[1];

        });

    }

});

console.log(jsonObject1);


查看完整回答
反對 回復 2022-12-08
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

您可以將響應作為字符串并比較每個的小寫版本:


function isSame(res1, res2) {

  return JSON.stringify(res1).toLowerCase() == JSON.stringify(res2).toLowerCase()

}


console.log( isSame({"DATA": "X"}, {"data": "x"}) )


查看完整回答
反對 回復 2022-12-08
  • 3 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號