我有一个由两个JSON对象组成的数组,我想确定它们是否相等。 下面是JSON对象的示例。
let JSON1 = {
"products": [
{
"productname": "product1",
"productversion": "1.0",
"features": [{ "featurename": "feature1", "featureversion": "1.0" }],
},
{
"productname": "product2",
"productversion": "2.0",
"features": [{ "featurename": "feature2", "featureversion": "2.0" }],
},
{
"productname": "product3",
"productversion": "3.0",
"features": [{ "featurename": "feature3", "featureversion": "3.0" }],
},
],
};
let JSON2 = {
"products": [
{
"productname": "product2",
"productversion": "2.0",
"features": [{ "featurename": "feature2", "featureversion": "2.0" }],
},
{
"productname": "product1",
"productversion": "1.0",
"features": [{ "featurename": "feature1", "featureversion": "1.0" }],
},
{
"productname": "product3",
"productversion": "3.0",
"features": [{ "featurename": "feature3", "featureversion": "3.0" }],
},
],
};
正如你看到的,我有三个乘积和一个与它们相关的特性,两个数组是相等的,只是数组元素的顺序不同。 对于上面的,它应该确定它是相等的。 只有在数组之间缺少一个对象时,才应为false。
let JSON3 = {
"products": [
{
"productname": "product1",
"productversion": "1.0",
"features": [{ "featurename": "feature1", "featureversion": "1.0" }],
},
{
"productname": "product2",
"productversion": "2.0",
"features": [{ "featurename": "feature2", "featureversion": "2.0" }],
},
{
"productname": "product3",
"productversion": "3.0",
"features": [{ "featurename": "feature4", "featureversion": "4.0" }],
},
],
};
let JSON4 = {
"products": [
{
"productname": "product2",
"productversion": "2.0",
"features": [{ "featurename": "feature5", "featureversion": "5.0" }],
},
{
"productname": "product1",
"productversion": "1.0",
"features": [{ "featurename": "feature1", "featureversion": "1.0" }],
},
{
"productname": "product3",
"productversion": "3.0",
"features": [{ "featurename": "feature3", "featureversion": "3.0" }],
},
],
};
比较JSON3和JSON4,它应该返回false,因为JSON4具有不同的特性集,我将其标记为粗体。 如何编写判断它们是否相等的脚本?
目前,我只是将属性值拉到数组,例如,我尝试比较prouductName和featureName,但这并不是一种有效的方法。 下面是代码片段。
我将不同的对象传递给下面的脚本,以便稍后比较数据。
let productNames = [];
let featureNames = [];
for(let l=0;l<products.length;l++) {
productNames.push(products[l].productname);
for(let k=0;k<products[l].features.length;k++) {
featureNames.push(products[l].features[k].featurename);
}
}
productNames.sort();
featureNames.sort();
在every()
和some()
的帮助下,您可以完成您的任务。
null
let JSON3 = { products:[{"productname":"product1","productversion":"1.0","features":[{"featurename":"feature1","featureversion":"1.0"}] }, {"productname":"product2","productversion":"2.0","features":[{"featurename":"feature2","featureversion":"2.0"}] },{"productname":"product3","productversion":"3.0","features":[{"featurename":"feature4","featureversion":"4.0"}] }] };
let JSON4 = { products: [{"productname":"product2","productversion":"2.0","features":[{"featurename":"feature5","featureversion":"5.0"}] },{"productname":"product1","productversion":"1.0","features":[{"featurename":"feature1","featureversion":"1.0"}] },{"productname":"product3","productversion":"3.0","features":[{"featurename":"feature3","featureversion":"3.0"}] }] };
var result = JSON3.products.every(k=>JSON4.products.some(d=>d.productname ==k.productname && d.features.every(s=>k.features.some(l=>l.featurename==s.featurename))));
console.log(result);