繁体   English   中英

比较两个对象,仅返回第一个对象的匹配值

[英]Compare two objects and return only the matched values from the first object

我想在两个对象之间进行比较,并且应该返回第一个对象中的匹配值。 例如:

对象1

[{
  "sex": "Male",
  "name": "Thomas",
  "country": "China"
}, {
  "sex": "Male",
  "name": "George",
  "country": "Nigeria"
}, {
  "sex": "Male",
  "name": "Mark",
  "country": "Serbia"
}, {
  "sex": "Male",
  "name": "Ronald",
  "country": "China"
}, {
  "sex": "Female",
  "name": "Jennifer",
  "country": "China"
}]

对象2

[{
  "sex": "Male",
  "country": "China"
}]

结果对象应该像

[{
  "sex": "Male",
  "name": "Thomas",
  "country": "China"
}, {
  "sex": "Male",
  "name": "Ronald",
  "country": "China"
}]

有没有可能这样做。 如果是的话,您能告诉我怎么做吗?

创建数组以保存结果

遍历两个对象

如果一个元素与另一个元素相等,则将其添加到reuslt数组中

返回结果数组。

您可以使用lodash _.filter https://lodash.com/docs#filter

var results = _.filter([{
  "sex": "Male",
  "name": "Thomas",
  "country": "China"
}, {
  "sex": "Male",
  "name": "George",
  "country": "Nigeria"
}, {
  "sex": "Male",
  "name": "Mark",
  "country": "Serbia"
}, {
  "sex": "Male",
  "name": "Ronald",
  "country": "China"
}, {
  "sex": "Female",
  "name": "Jennifer",
  "country": "China"
}], {
  "sex": "Male",
  "country": "China"
})

尝试这个

var firstObject = [{
  "sex": "Male",
  "name": "Thomas",
  "country": "China"
}, {
  "sex": "Male",
  "name": "George",
  "country": "Nigeria"
}, {
  "sex": "Male",
  "name": "Mark",
  "country": "Serbia"
}, {
  "sex": "Male",
  "name": "Ronald",
  "country": "China"
}, {
  "sex": "Female",
  "name": "Jennifer",
  "country": "China"
}];


var secondObject = [{
  "sex": "Male",
  "country": "China"
}]

var finalArray=[];

for (var i=0 ; i < firstObject.length ; i++){
    for(var k=0 ; k <secondObject.length ; k++){
        if((secondObject[k].sex == firstObject[k].sex) && (secondObject[k].country == firstObject[k].country)){
            finalArray.push(firstObject[k]);
        }

    }

}

使用unserscore.js检查以下不错且干净的解决方案

 var a = [{ "sex": "Male", "name": "Thomas", "country": "China" }, { "sex": "Male", "name": "George", "country": "Nigeria" }, { "sex": "Male", "name": "Mark", "country": "Serbia" }, { "sex": "Male", "name": "Ronald", "country": "China" }, { "sex": "Female", "name": "Jennifer", "country": "China" }]; var b = [{ "sex": "Male", "country": "China" }]; var result = []; // IN CASE B IS ARRAY OF OBJECT _.each(b, function(item, index) { Array.prototype.push.apply(result, _.where(a, item)); }); // result contains all the matched objects console.log(result); // IN CASE IF B IS SINGLE OBJECT result = []; Array.prototype.push.apply(result, _.where(a, b[0])); // result contains all the matched objects console.log(result); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 

暂无
暂无

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

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