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的解决方案需要多几个步骤。我真的很感激你的回答。