首页 > 解决方案 > 无法比较 JSON 对象值(相同的对象值,从 0 到 n)

问题描述

拥有一个 JSON 对象并包含货币值列表。如果所有货币都不相同,我需要进行“数据不匹配”之类的验证,所有相同的货币都需要进行剩余的验证(其他部分)。我尝试使用以下代码,但比较失败。

Ex: 

'[{"currency":"EUR"},{"currency":"EUR"},{"currency":"USD"}]';  // data mismatches

'[{"currency":"EUR"},{"currency":"EUR"},{"currency":"EUR"}]';  // data matches

'[{"currency":"USD"},{"currency":"INR"},{"currency":"EUR"}]';  // data mismatches

$(document).ready(function(){
var text = '[{"currency":"EUR"},{"currency":"EUR"},{"currency":"USD"}]';
obj = JSON.parse(text);
for (var i = 0; i < obj.length; i++) {
    if (obj[0].currency != obj[i].currency) {
        alert("Data mismatched");
    } else {
        alert("Data matched");
    }
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

标签: javascriptjquery

解决方案


为此,您可以使用该every()方法确保currency对象中的所有属性都相同:

let checkCurrencies = (arr) => arr.every(item => item.currency === arr[0].currency);

let invalidArr = JSON.parse('[{"currency":"EUR"},{"currency":"EUR"},{"currency":"USD"}]');
console.log(checkCurrencies(invalidArr)); // = false

let validArr = JSON.parse('[{"currency":"EUR"},{"currency":"EUR"},{"currency":"EUR"}]');
console.log(checkCurrencies(validArr)); // = true


推荐阅读