繁体   English   中英

柴-检查2个对象数组具有相同的标题

[英]Chai - check 2 objects arrays have same title

假设我有2个包含对象的数组:

var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]

var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]

我如何验证它们在每个数组中具有相同的标题值,即使它们的排列顺序不同?

我可以使用类似的东西吗?

expect(aArray.title).to.deep.equal(bArray.title)

然后对于匹配的标题项目,我要检查两者之间的价格是否相同。

我也尝试过expect(cart).to.deep.include.members(cart2).but.not.own.deep.include.property('someDetail');

我认为您可以从这两个数组中获得所有标题。

并使用eql进行比较。

var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]

var aTitle = aArray.map(item => item.title);
var bTitle = bArray.map(item => item.title);

expect(aTitle).eql(bTitle)

更新

如果您想检查titleprice是否匹配,目前我认为一种方法会更容易。

您可以将标题和价格组合成字符串并进行比较。

var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]
var bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ]

var aTitle = aArray.map(item => `${item.title}|${item.price}`); // ['Abc|1,200', 'def|900']
var bTitle = bArray.map(item => `${item.title}|${item.price}`);
expect(aTitle).eql(bTitle);

我猜有多种方法可以做到。 这是只需要将bArray映射到具有所需键(即titleprice

然后,您可以将membersdeep一起使用。 如您所见,不需要数组成员的顺序相同,但是需要相同的键。

 const aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ] const bArray = [ { title: 'def', price: '900', other: 'someDetail' }, { title: 'Abc', price: '1,200', other: 'someDetail' } ] const newBArray = bArray.map(({ title, price }) => ({ title, price })) try { chai.expect(newBArray).to.have.deep.members(aArray) } catch (e) { console.log("Error!", e) } finally { console.log("Done with execution.") } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/chai/4.1.2/chai.min.js"></script> 

我已经使用try / catch / finally使代码给出有关发生情况的有效提示。

您可以在数组上使用find()方法。

find()方法返回满足提供的测试功能的数组中第一个元素的值。 否则返回undefined。

var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]

var bArray = [ { title: 'def', price: '900' }, { title: 'Abc', price: '1,200' } ]

var sameTitle = true;
aArray.forEach(function(objA){
    var titleMatch = bArray.find(function(objB){
        return objA.title === objB.title;
    })
    if(titleMatch === undefined) sameTitle = false;
})
console.log(sameTitle);

您可以使用这种方式进行验证。

 var aArray = [ { title: 'Abc', price: '1,200' }, { title: 'def', price: '900' } ]

    var bArray = [ { title: 'def', price: '900' }, { title: 'Abc', price: '1,200' } ]


    for(i=0;i<aArray.length;i++){
        var CheckTitle=aArray[i].title;
        for(j=0;j<bArray.length;j++){
            var CheckTitle1=bArray[j].title;

            if(CheckTitle==CheckTitle1){
                alert("same title");
            }
            else{
                alert("diff title");
            }

        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM