首页 > 解决方案 > 在JavaScript中如何检查数组值是否存在于对象数组中而​​不重复

问题描述

我有一个数组

let names = ['Devid', 'Aries','James'];

和一个对象数组

let details = [
{"Name":"John"},
{"Name":"Devid"},
{"Name":"Aries"},
{"Name":"Aries"}
];

我想详细检查所有名称是否存在,它们在 1 个循环中的名称不重复如果存在重复值,则将其计为 1 输出应为 count= 2,但我的代码返回 count 3

 let names = ['Devid', 'Aries','James'];

 let details = [
    {"Name":"John"},
    {"Name":"Devid"},
    {"Name":"Aries"},
    {"Name":"Aries"}
    ];

let count = 0;

for (var eachDetail of details) {
     // checking here Name exist
     let isNameFound = names.some(el => eachDetail.Name.includes(el));
            if (isNameFound) count++;
        }
console.log(count);

// console.log(3) expected output 2

输出应为 2(因为 Devid 和 Aries)存在

标签: javascriptnode.jsarraysobject

解决方案


您可以使用reduce来计算数组中可以在对象值中找到的元素。您可以使用 aSet删除重复项。

let names = ['Devid', 'Aries','James'];

let details = [
  {"Name":"John"},
  {"Name":"Devid"},
  {"Name":"Aries"},
  {"Name":"Aries"}
];

const detailsNames = [...new Set(details.map(d => d.Name))];
const count = [...new Set(names)].reduce((acc, el) => acc + detailsNames.includes(el), 0);

console.log(count);


推荐阅读