Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 比较两个数组,得到总的和匹配的元素_Javascript_Arrays_Ecmascript 6 - Fatal编程技术网

Javascript 比较两个数组,得到总的和匹配的元素

Javascript 比较两个数组,得到总的和匹配的元素,javascript,arrays,ecmascript-6,Javascript,Arrays,Ecmascript 6,我想得到数组中元素总数,匹配条件的元素数和不匹配条件的元素数。 条件是字段名称 以下是一份清单: [ {"name": "tom", "id": "1"}, {"name": "jack", "id": "2"}, {"name": "sarah", "id": "3"}, {"name": "william", "id": "4"}, {"name": "ronaldo", "id": "5"} ] 下面是列表B: [ {"name": "tom", "age": "20"}, {"name

我想得到数组中元素总数,匹配条件的元素数和不匹配条件的元素数。 条件是字段名称

以下是一份清单:

[
{"name": "tom", "id": "1"},
{"name": "jack", "id": "2"},
{"name": "sarah", "id": "3"},
{"name": "william", "id": "4"},
{"name": "ronaldo", "id": "5"}
]
下面是列表B:

[
{"name": "tom", "age": "20"},
{"name": "jack", "age": "25"}
]
因此,它应该给出三个值:

var total = 5;
var matching = 2;
var notmatchin = 3;

如何使用javascript ecma 6中的一些map和reduce方法实现这一点?

您可以使用
.length
检查计数

您可以使用
.reduce
对匹配项进行计数。可以使用
.includes
检查字符串是否在数组中

通过简单的算法获取不匹配项

var$arr1=[{
“姓名”:“汤姆”,
“id”:“1”
},
{
“姓名”:“杰克”,
“id”:“2”
},
{
“姓名”:“莎拉”,
“id”:“3”
},
{
“姓名”:“威廉”,
“id”:“4”
},
{
“姓名”:“罗纳尔多”,
“id”:“5”
}
];
变量$arr2=[{
“姓名”:“汤姆”,
“年龄”:“20”
},
{
“姓名”:“杰克”,
“年龄”:“25”
}
]
//使临时数组为$arr2
var temp=$arr2.map((v)=>v.name);
//数一数
变量计数=$arr1.length;
//使用reduce获取匹配
var match=$arr1.reduce((c,i)=>{
温度包括(I.NoD)?C++:C;
返回c;
}, 0);
//不匹配
var unmatch=计数-匹配;
控制台日志(“计数”+计数);
控制台日志(“匹配”+匹配);
console.log(“不匹配”+不匹配)
  • 使用
    a.length
  • 使用
    b获取匹配计数。reduce
    a
    中找到当前
    .name
    的位置累积计数。使用
    .some()
    ,返回
    true
    false
    。由于布尔值分别转换为
    1
    0
    ,因此只需将它们添加到累加器中即可
  • 通过从完整计数中减去匹配项来获取不匹配项
var a=[
{“姓名”:“汤姆”,“身份证”:“1”},
{“姓名”:“杰克”,“身份证”:“2”},
{“姓名”:“莎拉”,“身份证”:“3”},
{“姓名”:“威廉”,“身份证”:“4”},
{“姓名”:“罗纳尔多”,“身份证”:“5”}
];
变量b=[
{“姓名”:“汤姆”,“年龄”:“20”},
{“姓名”:“杰克”,“年龄”:“25”}
];
var total=a.长度;
var匹配=b.reduce((n,o)=>n+(a.some(oo=>o.name==oo.name)),0);
var notmatching=总匹配;
log(`total:${total}
匹配:${matching}

不匹配:${notmatching}`)请分享您尝试过的代码。感谢您的明确回答,但您的解决方案比clockwork的解决方案需要多几个步骤。我真的很感激你的回答。